ETH Price: $2,092.75 (+1.65%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Set Freeze1443768252025-11-28 17:53:4771 days ago1764352427IN
0x0B36E930...3ddB3441b
0 ETH0.0000000015290.00000059
Submit Update1443762122025-11-28 17:33:2171 days ago1764351201IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005397220.001
Submit Update1443744042025-11-28 16:33:0571 days ago1764347585IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000012751050.0024
Submit Update1443733022025-11-28 15:56:2171 days ago1764345381IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005326820.001
Submit Update1443726882025-11-28 15:35:5371 days ago1764344153IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005851290.00110056
Submit Update1443721712025-11-28 15:18:3971 days ago1764343119IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000006126910.00115453
Submit Update1443714912025-11-28 14:55:5971 days ago1764341759IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000589470.0001006
Submit Update1443709322025-11-28 14:37:2171 days ago1764340641IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000004174320.00077834
Submit Update1443702122025-11-28 14:13:2171 days ago1764339201IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005310280.001
Submit Update1443695502025-11-28 13:51:1771 days ago1764337877IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005282350.001
Submit Update1443688322025-11-28 13:27:2171 days ago1764336441IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005259540.001
Submit Update1443680622025-11-28 13:01:4171 days ago1764334901IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000577370.00010038
Submit Update1443678662025-11-28 12:55:0971 days ago1764334509IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005295420.00100038
Submit Update1443667962025-11-28 12:19:2971 days ago1764332369IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005306320.00100047
Submit Update1443659132025-11-28 11:50:0371 days ago1764330603IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000001894580.00035688
Submit Update1443627862025-11-28 10:05:4971 days ago1764324349IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000398030.00007234
Submit Update1443621952025-11-28 9:46:0771 days ago1764323167IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005290970.00100043
Submit Update1443609992025-11-28 9:06:1571 days ago1764320775IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005302340.00100075
Submit Update1443598532025-11-28 8:28:0371 days ago1764318483IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000546550.0001005
Submit Update1443578852025-11-28 7:22:2771 days ago1764314547IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000546360.00010039
Submit Update1443570742025-11-28 6:55:2571 days ago1764312925IN
0x0B36E930...3ddB3441b
0.000004 ETH0.000000526170.00100043
Submit Update1443558862025-11-28 6:15:4971 days ago1764310549IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000002511780.00049128
Submit Update1443548102025-11-28 5:39:5771 days ago1764308397IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000000039480.00000322
Submit Update1443536882025-11-28 5:02:3371 days ago1764306153IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005097070.00100041
Submit Update1443536422025-11-28 5:01:0171 days ago1764306061IN
0x0B36E930...3ddB3441b
0.000004 ETH0.0000005122150.0010004
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1443762122025-11-28 17:33:2171 days ago1764351201
0x0B36E930...3ddB3441b
0.000004 ETH
1443744042025-11-28 16:33:0571 days ago1764347585
0x0B36E930...3ddB3441b
0.000004 ETH
1443733022025-11-28 15:56:2171 days ago1764345381
0x0B36E930...3ddB3441b
0.000004 ETH
1443726882025-11-28 15:35:5371 days ago1764344153
0x0B36E930...3ddB3441b
0.000004 ETH
1443721712025-11-28 15:18:3971 days ago1764343119
0x0B36E930...3ddB3441b
0.000004 ETH
1443714912025-11-28 14:55:5971 days ago1764341759
0x0B36E930...3ddB3441b
0.000004 ETH
1443709322025-11-28 14:37:2171 days ago1764340641
0x0B36E930...3ddB3441b
0.000004 ETH
1443702122025-11-28 14:13:2171 days ago1764339201
0x0B36E930...3ddB3441b
0.000004 ETH
1443695502025-11-28 13:51:1771 days ago1764337877
0x0B36E930...3ddB3441b
0.000004 ETH
1443688322025-11-28 13:27:2171 days ago1764336441
0x0B36E930...3ddB3441b
0.000004 ETH
1443680622025-11-28 13:01:4171 days ago1764334901
0x0B36E930...3ddB3441b
0.000004 ETH
1443678662025-11-28 12:55:0971 days ago1764334509
0x0B36E930...3ddB3441b
0.000004 ETH
1443667962025-11-28 12:19:2971 days ago1764332369
0x0B36E930...3ddB3441b
0.000004 ETH
1443659132025-11-28 11:50:0371 days ago1764330603
0x0B36E930...3ddB3441b
0.000004 ETH
1443627862025-11-28 10:05:4971 days ago1764324349
0x0B36E930...3ddB3441b
0.000004 ETH
1443621952025-11-28 9:46:0771 days ago1764323167
0x0B36E930...3ddB3441b
0.000004 ETH
1443609992025-11-28 9:06:1571 days ago1764320775
0x0B36E930...3ddB3441b
0.000004 ETH
1443598532025-11-28 8:28:0371 days ago1764318483
0x0B36E930...3ddB3441b
0.000004 ETH
1443578852025-11-28 7:22:2771 days ago1764314547
0x0B36E930...3ddB3441b
0.000004 ETH
1443570742025-11-28 6:55:2571 days ago1764312925
0x0B36E930...3ddB3441b
0.000004 ETH
1443558862025-11-28 6:15:4971 days ago1764310549
0x0B36E930...3ddB3441b
0.000004 ETH
1443548102025-11-28 5:39:5771 days ago1764308397
0x0B36E930...3ddB3441b
0.000004 ETH
1443536882025-11-28 5:02:3371 days ago1764306153
0x0B36E930...3ddB3441b
0.000004 ETH
1443536422025-11-28 5:01:0171 days ago1764306061
0x0B36E930...3ddB3441b
0.000004 ETH
1443533692025-11-28 4:51:5571 days ago1764305515
0x0B36E930...3ddB3441b
0.000004 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RewardProxy

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at optimistic.etherscan.io on 2025-08-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

struct RecordReceipt {
    RecordKey record;
    Record old_record;
    Record new_record;
}

struct Record {
    uint64 height;
    uint48 timestamp;
    uint240 value;
}

struct RecordKey {
    uint8 systemid;
    uint64 cid;
    uint16 typ;
}

interface Oracle {
    function storeValuesWithReceipt(bytes memory dat) external payable returns (RecordReceipt[] memory receipts);
    function checkUpdatesWithReceipt(bytes memory dat) external view returns (RecordReceipt[] memory receipts);
}

contract RewardProxy { 

    event RewardsSimulated(
        address updater,
        uint8 system_id,
        uint64 chain_id,
        uint240 new_value,
        uint240 raw_deviation,
        uint48 time_since,
        uint256 time_reward, 
        uint256 deviation_reward,
        int256 reward_multiplier
    );

    event OracleUpdated(
        address updater,
        uint8 system_id,
        uint64 chain_id,
        uint240 new_value,
        uint240 raw_deviation,
        uint48 time_since,
        uint256 time_reward, 
        uint256 deviation_reward,
        int256 reward_multiplier
    );

    event RewardsToggled(
        bool rewards_on
    );

    event RewardsFreeze(
        bool rewards_frozen
    );

    event SeasonChanged(
        uint64 id
    );

    struct TotalReward {
        address addr;
        uint256 total_rewards;
    }

    struct TotalRewardRecord {
        address addr;
        RewardRecord rewards;
    }

    struct EnhancedReward {
        uint8 system_id;
        uint64 chain_id;
        uint64 height;
        uint240 gas_price;
        uint256 time_reward;
        uint256 deviation_reward;
    }

    struct RewardRecord {
        uint256 reward;
        uint256 count;
    }

    struct ControlOutput {
        int80 kp;
        int80 ki;
        int80 co_bias;
    } 
    struct Coefficients {
        int96 zero;
        int96 one;
        int96 two;
        int96 three;
    } 
    struct RewardLimits {
        int256 min_time_reward;
        int256 max_time_reward;
        int256 min_deviation_reward;
        int256 max_deviation_reward;
    }

    uint64 private seasonID;

    int256 constant EIGHTEEN_DECIMAL_NUMBER = 10**18;
    int256 constant THIRTY_SIX_DECIMAL_NUMBER = 10**36;
    uint256 constant EIGHTEEN_DECIMAL_NUMBER_U = 10**18;

    uint256 constant EMA_ALPHA = 818181818181818176; // 1 - 2/11 
    uint256 constant ALPHA_COMP = EIGHTEEN_DECIMAL_NUMBER_U - EMA_ALPHA;


    mapping(uint72 => int256) private errorIntegral;
    mapping(uint72 => int256) private lastOutput; 

    uint32 private minWindowSize; 
    uint256 private totalRewards;

    mapping(uint64 => mapping(address => RewardRecord)) private rewards;

    mapping(uint72 => uint256) private insertedCount;   // Number of elements inserted so far, up to N
    mapping(uint72 => uint256) private scales;

    mapping(uint72 => uint256) private intervalEMAs;

    mapping(address => bool) private authorities;

    mapping(uint256 => address) private updaters;
    uint256 public updatersCount; 

    bool private frozen;
    bool private rewardsEnabled;

    uint16 private rewardType;
 
    int256 minTimeReward;
    int256 maxTimeReward;
    int256 minDeviationReward;
    int256 maxDeviationReward;

    ControlOutput private controlOutput;

    int96 private coeffZero;
    int96 private coeffOne;
    int96 private coeffTwo;
    int96 private coeffThree;  

    int256 outputUpperBound;  
    int256 outputLowerBound;  
    uint256 targetTimeSince;
 
    Oracle private oracle;

    constructor(address o) {
        authorities[o] = true;
        frozen = true;
        rewardsEnabled = false;
        seasonID = 0;
    }

    function setOracle(address a) public {
        require(authorities[msg.sender], "Only owner can modify values");
        oracle = Oracle(a);
    }

    function setFreeze(bool f) public {
        require(authorities[msg.sender], "Only owner can modify values");
        frozen = f;
        emit RewardsFreeze(f);
    }

    function setRewardsProcess(bool f) public {
        require(authorities[msg.sender], "Only owner can modify values");
        rewardsEnabled = f;
        emit RewardsToggled(f);
    }

    function setRewardType(uint16 rType) public {  
        require(authorities[msg.sender], "Only owner can set reward type");
        rewardType = rType;
    }

    function updateScales(uint72[] calldata scid, uint256[] calldata  scale) public {
        require(authorities[msg.sender], "Only owner can set scales");
        require(scid.length == scale.length, "scid and scale length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            scales[scid[i]] = scale[i];
        }
    }

    function setSeasonID(uint64 f) public {
        require(authorities[msg.sender], "Only owner can modify season ID"); 
        seasonID = f;
        emit SeasonChanged(f);
    }

    function getCurrentSeason() public view returns (uint64) {
        return seasonID;
    }

    function updateErrorIntegrals(uint72[] calldata scid, int256[] calldata errorIntegrals) public {
        require(authorities[msg.sender], "Only owner can set error integrals");
        require(scid.length == errorIntegrals.length, "scid and integrals length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            errorIntegral[scid[i]] = errorIntegrals[i];
        }
    }

    function getErrorIntegrals(uint72 scid) public view returns (int256) {
        return errorIntegral[scid];
    }

    function getLastOutput(uint72 scid) public view returns (int256) {
        return lastOutput[scid];
    }    

    function updateIntervalEMA(uint72[] calldata scid, uint256[] calldata  lIntervalEMAs) public {
        require(authorities[msg.sender], "Only owner can set interval EMAs");
        require(scid.length == lIntervalEMAs.length, "scid and emas length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            intervalEMAs[scid[i]] = lIntervalEMAs[i];
        }
    }

    function getFromIntervalEMAs(uint72 scid) public view returns (uint256) {
        return intervalEMAs[scid];
    }

    function setAuthority(address a, bool stat) public {  
        require(authorities[msg.sender], "Only owner can modify authorities"); 
        if (a != msg.sender) {
            require(stat, "Cannot revoke own access");
        }
        authorities[a] = stat;
    }

    function getTotalRewards() public view returns (uint256) {
        return totalRewards;
    }

    function getAddressRewardRecords(address addr) public view returns (RewardRecord[] memory rec) {
        rec = new RewardRecord[](seasonID + 1);
        for (uint64 i = 0; i <= seasonID; ++i) {
            rec[i] = rewards[i][addr];
        }
        return rec;
    }

    function getAddressRewards(address addr) public view returns (uint256 total) {  
        for (uint64 i = 0; i <= seasonID; ++i) {
            total += rewards[i][addr].reward;
        }
        return total;
    }

    function getAddressSeasonalRewards(address addr, uint64 season) public view returns (uint256) {
        return rewards[season][addr].reward;
    }

    function getAddressSeasonalCount(address addr, uint64 season) public view returns (uint256) {
        return rewards[season][addr].count;
    }

    function getRewardType() public view returns (uint16) {
        return rewardType;
    }

    function getCoefficients() public view returns (Coefficients memory) {
        return Coefficients(coeffZero, coeffOne, coeffTwo, coeffThree);
    }

    function getScales(uint72 scid) public view returns (uint256) {
        return scales[scid];
    }

    function getGameParams() public view returns (
        ControlOutput memory,
        int256,
        int256,
        uint256,
        uint32,
        RewardLimits memory
    ) {
        return (
            controlOutput,
            outputUpperBound,
            outputLowerBound,
            targetTimeSince,
            minWindowSize,
            RewardLimits(minTimeReward, maxTimeReward, minDeviationReward, maxDeviationReward)
        );
    }


    function getOracleAddress() public view returns (address) {
        return address(oracle);
    }

    function setParams(
        ControlOutput calldata co, 
        int256 lOutputUpperBound,
        int256 lOutputLowerBound,
        uint256 lTargetTimeSince,
        RewardLimits calldata rl,
        uint32 lMinWindowSize
    ) public {
        require(authorities[msg.sender], "Only owner can set params");
        controlOutput = co;
        outputUpperBound = lOutputUpperBound;
        outputLowerBound = lOutputLowerBound;
        targetTimeSince = lTargetTimeSince;
        minWindowSize = lMinWindowSize;

        minTimeReward = rl.min_time_reward;
        maxTimeReward = rl.max_time_reward;
        minDeviationReward = rl.min_deviation_reward;
        maxDeviationReward = rl.max_deviation_reward;
    }

    function updateCoeffs(Coefficients calldata coeffs) public {
        require(authorities[msg.sender], "Only owner can update coefficients");
        coeffZero = coeffs.zero;
        coeffOne = coeffs.one;
        coeffTwo = coeffs.two;
        coeffThree = coeffs.three;
    }

    function initialSetParams(
        address lOracle,
        int256 lOutputUpperBound,
        int256 lOutputLowerBound,
        uint256 lTargetTimeSince,
        RewardLimits calldata rl,
        ControlOutput calldata co, 
        Coefficients calldata coeffs,
        uint32 lMinWindowSize,
        uint16 lRewardType
    ) public {
        setParams(
            co,
            lOutputUpperBound,
            lOutputLowerBound,
            lTargetTimeSince,
            rl,
            lMinWindowSize
        );
        setOracle(lOracle);
        setRewardType(lRewardType);
        updateCoeffs(coeffs);
    }

    // in case of a security breach, the owner can modify the reward values
    function ownerModifyReward(uint64 season, address ow, uint256 amount, uint64 count, uint256 tr) public {
        require(authorities[msg.sender], "Only owner can modify values");
        rewards[season][ow] = RewardRecord({
            reward: amount,
            count: count
        });
        totalRewards = tr;
    }

    function addUpdater(address updater) internal {
        require(updater != address(0), "Updater address is empty");
 
        for (uint64 i = 0; i <= seasonID; i++) {
            if (rewards[i][updater].count > 0 ) { 
                return; 
            }
        } 
        updaters[updatersCount] = updater;
        updatersCount = updatersCount + 1;
    }

    function scidToUint72(uint8 systemID, uint64 chainID) internal pure returns (uint72 scid) {
        assembly {
            scid := systemID
            scid := shl(0x40, scid)
            scid := add(scid, chainID)
        }
        return scid;
    }

    function submitUpdate(bytes memory dat) public payable returns ( EnhancedReward[] memory enhancedRewards) {
        require(!frozen, "Rewards contract is frozen");

        addUpdater(msg.sender);
        RecordReceipt[] memory receipts = oracle.storeValuesWithReceipt{value: msg.value}(dat);
        enhancedRewards = new EnhancedReward[](receipts.length);

        RecordReceipt memory rec;
        uint240 raw_deviation;
        uint256 l_total_rewards = 0;
        for (uint256 idx = 0; idx < receipts.length; idx++) {
            rec = receipts[idx];
            if (rec.record.typ != rewardType) {
                continue;
            }

            uint72 scid = scidToUint72(rec.record.systemid, rec.record.cid);
            uint256 deviation;
            {
                uint256 target_scale;
                target_scale = scales[scid]; 
                if (target_scale == 0) {
                    continue;
                }

                if (rec.new_record.height == 0) {
                    // emit event?
                    enhancedRewards[idx] = EnhancedReward(rec.record.systemid,rec.record.cid,rec.old_record.height,rec.old_record.value,0,0);
                    continue;
                }
                
                if (rec.new_record.value > rec.old_record.value ) {
                    raw_deviation = rec.new_record.value - rec.old_record.value;
                } else {
                    raw_deviation = rec.old_record.value - rec.new_record.value;
                }

                deviation = calcDeviation(target_scale, uint256(raw_deviation));
            }
            uint256 time_since = uint256(rec.new_record.timestamp - rec.old_record.timestamp) * EIGHTEEN_DECIMAL_NUMBER_U;

            //  calculate reward
            (int256 time_reward, int256 deviation_reward) = calcReward(int256(time_since)/1000, int256(deviation));

            int256 reward_mult = updateRewardMult(scid, insertedCount[scid], time_since/1000);
            insertedCount[scid] = insertedCount[scid] + 1;

            uint256 time_reward_adj = uint256(reward_mult * time_reward / EIGHTEEN_DECIMAL_NUMBER);
            uint256 deviation_reward_adj = uint256(reward_mult * deviation_reward / EIGHTEEN_DECIMAL_NUMBER);

             if (rewardsEnabled) {
                claimReward(time_reward_adj + deviation_reward_adj);
                emit OracleUpdated( msg.sender,
                        rec.record.systemid,
                        rec.record.cid,
                        rec.new_record.value, 
                        raw_deviation,
                        uint48(time_since/10**21),
                        time_reward_adj, 
                        deviation_reward_adj,
                        reward_mult);
                l_total_rewards += time_reward_adj + deviation_reward_adj;
            } else {
                emit RewardsSimulated(msg.sender,
                    rec.record.systemid,
                    rec.record.cid,
                    rec.new_record.value, 
                    raw_deviation,
                    uint48(time_since/10**21),
                    time_reward_adj, 
                    deviation_reward_adj,
                    reward_mult);
            }

            enhancedRewards[idx] = EnhancedReward(rec.record.systemid,rec.record.cid,rec.new_record.height,rec.new_record.value,time_reward_adj,deviation_reward_adj);
        }
        totalRewards += l_total_rewards;

        return enhancedRewards;
    }


    function claimReward(uint256 reward) private {
        RewardRecord storage rew = rewards[seasonID][msg.sender];
        rew.reward += reward;
        rew.count += 1;
    }
 

    function checkRewards(bytes memory dat) public view returns ( EnhancedReward[] memory enhancedRewards) {
        require(!frozen, "Rewards contract is frozen");
        RecordReceipt[] memory receipts = oracle.checkUpdatesWithReceipt(dat); 
        enhancedRewards = new EnhancedReward[](receipts.length);

        int256[] memory local_error_integrals = new int256[](receipts.length);
        uint256[] memory local_counts = new uint256[](receipts.length);
        uint256[] memory local_inverval_emas = new uint256[](receipts.length);

        for (uint256 idx = 0; idx < receipts.length; idx++) {
            RecordReceipt memory rec = receipts[idx];
            RecordKey memory recordkey = rec.record;
            if (recordkey.typ != rewardType) {
                continue;
            }

            if (scales[scidToUint72(recordkey.systemid, recordkey.cid)] == 0) {
                continue;
            }

            if (rec.new_record.height == 0) {
                enhancedRewards[idx] = EnhancedReward(recordkey.systemid,recordkey.cid,rec.old_record.height,rec.old_record.value,0,0);
                continue;
            }

            uint256 deviation;
            {    
                uint240 raw_deviation;
                    if (rec.new_record.value > rec.old_record.value ) {
                        raw_deviation = rec.new_record.value - rec.old_record.value;
                    } else {
                        raw_deviation = rec.old_record.value - rec.new_record.value;
                    }    
                deviation = calcDeviation(scales[scidToUint72(recordkey.systemid, recordkey.cid)], uint256(raw_deviation));
            }
            uint256 time_since = uint256(rec.new_record.timestamp - rec.old_record.timestamp) * EIGHTEEN_DECIMAL_NUMBER_U;
            int256 reward_mult;
            {
                (uint256 nidx, bool f) = checkPresence(receipts,  idx,  recordkey.systemid, recordkey.cid);
                uint256 _count;
                if (f) {
                    _count = local_counts[nidx]; 
                } else {
                    _count = insertedCount[scidToUint72(recordkey.systemid, recordkey.cid)]; 
                }

                if (f) {
                uint256 _inverval_ema  = getIntervalEMA(local_inverval_emas[nidx], time_since/1000);
                local_inverval_emas[nidx] = _inverval_ema;
            
                    if (_count + 1 < minWindowSize) {
                        reward_mult = EIGHTEEN_DECIMAL_NUMBER;
                    } else {
                        int256 u_err = calcError(int256(targetTimeSince), int256(_inverval_ema) );
                        int256 _error_integral  = local_error_integrals[nidx];
                        reward_mult = boundPiOutput(getRawPiOutput(u_err, _error_integral + u_err));
                        local_error_integrals[nidx] = clampErrorIntegral(reward_mult, _error_integral, _error_integral + u_err, u_err); 
                    }
                } else {
                    uint256 _inverval_ema  = getIntervalEMA(intervalEMAs[scidToUint72(recordkey.systemid, recordkey.cid)], time_since/1000);
                    local_inverval_emas[idx] = _inverval_ema;

                    if (_count + 1 < minWindowSize) {
                        reward_mult = EIGHTEEN_DECIMAL_NUMBER;
                    } else {
                        int256 u_err = calcError(int256(targetTimeSince), int256(_inverval_ema) );
                        int256 _error_integral  =  errorIntegral[scidToUint72(recordkey.systemid, recordkey.cid)]; 
                        reward_mult = boundPiOutput(getRawPiOutput(u_err, _error_integral + u_err));
                        local_error_integrals[idx] = clampErrorIntegral(reward_mult, _error_integral, _error_integral + u_err, u_err); 
                    }
                }
                
                if (f) {
                    local_counts[nidx] = _count + 1;
                } else {
                    local_counts[idx] = _count + 1;
                }
            }

            (int256 time_reward, int256 deviation_reward) = calcReward(int256(time_since)/1000, int256(deviation));
            enhancedRewards[idx] = EnhancedReward(recordkey.systemid,
                recordkey.cid,
                rec.old_record.height,
                rec.old_record.value,
                uint256(reward_mult * time_reward / EIGHTEEN_DECIMAL_NUMBER),
                uint256(reward_mult * deviation_reward / EIGHTEEN_DECIMAL_NUMBER));
        }

        return enhancedRewards;
    } 

    function checkPresence(RecordReceipt[] memory p, uint256 idx, uint8 systemid, uint64 chainid) private pure returns (uint256, bool) {
         for (uint256 i = 0; i < p.length; ++i) {
            if (systemid != 0 && chainid != 0 && p[i].record.systemid == systemid && p[i].record.cid == chainid) {
               if (i > idx) {
                    return (i, true);
                }
            }
        }
        return (0, false);
    }

    function max(int256 a, int256 b) private pure returns (int256) {
        return a >= b ? a : b;
    }

    function min(int256 a, int256 b) private pure returns (int256) {
        return a < b ? a : b;
    }

    function boundPiOutput(int256 piOutput) private view returns (int256 boundedPiOutput) {
        if (piOutput < outputLowerBound) {
            return outputLowerBound;
        } else if (piOutput > outputUpperBound) {
            return outputUpperBound;
        }
        return piOutput;
    }

    function clampErrorIntegral(int256 boundedPiOutput, int256 lErrorIntegral, int256 newErrorIntegral, int256 newArea) private view returns (int256) {
        // This logic is strictly for a *reverse-acting* controller where controller
        // output is opposite sign of error(kp and ki < 0)
        if (boundedPiOutput == outputLowerBound && newArea > 0 && lErrorIntegral > 0) {
            return newErrorIntegral - newArea;
        } else if (boundedPiOutput == outputUpperBound && newArea < 0 && lErrorIntegral < 0) {
            return newErrorIntegral - newArea;
        }
        return newErrorIntegral;
    }

    function getRawPiOutput(int256 err, int256 errI ) private view returns (int256 piOutput) {
        // output = P + I = Kp * error + Ki * errorI 
        int256 p_output = (err * int256(controlOutput.kp)) / EIGHTEEN_DECIMAL_NUMBER;
        int256 i_output = (errI * int256(controlOutput.ki)) / EIGHTEEN_DECIMAL_NUMBER;
        return int256(controlOutput.co_bias) + p_output + i_output;
    }

    function calcError(int256 target, int256 measured) private pure returns (int256) {
        return (target - measured) * EIGHTEEN_DECIMAL_NUMBER / target;
    }

    function calcDeviation(uint256 targetScale, uint256 valueDiff) private pure returns (uint256) {
        return valueDiff*EIGHTEEN_DECIMAL_NUMBER_U/targetScale;
    }

    function updateRewardMult(uint72 scid, uint256 lCount, uint256 timeSince) private returns (int256 rewardMult) {
        // Update oracle update_interval
        uint256 _inverval_ema = getIntervalEMA(intervalEMAs[scid], timeSince);
        intervalEMAs[scid] = _inverval_ema;

        // Dont use feedback if number of samples is lt window size
        if (lCount + 1 < minWindowSize) {
            return EIGHTEEN_DECIMAL_NUMBER;
        }
        //  update feedback mechanism and get current reward multiplier
        return updateFeedback(scid, calcError(int256(targetTimeSince), int256(_inverval_ema) ));
    }
  
    function calcTimeReward(int256 timeSince) private view returns (int256) {       
        return max(
                min(    
                    int256(coeffZero)*timeSince/EIGHTEEN_DECIMAL_NUMBER + 
                    int256(coeffTwo)*timeSince*timeSince/THIRTY_SIX_DECIMAL_NUMBER, 
                    maxTimeReward), 
                minTimeReward);
    }

    function calcDeviationReward(int256 deviation) private view returns (int256) {
        return max(
                min(
                    int256(coeffOne)*deviation/EIGHTEEN_DECIMAL_NUMBER +
                    int256(coeffThree)*deviation*deviation/THIRTY_SIX_DECIMAL_NUMBER,
                    maxDeviationReward),
                minDeviationReward);
    } 

    function calcReward(int256 timeSince, int256 deviation) private view returns (int256, int256) {
        return (calcTimeReward(timeSince), calcDeviationReward(deviation));
    }

    function getIntervalEMA(uint256 lIntervalEMA, uint256 newValue) private pure returns (uint256) {
        return (ALPHA_COMP * newValue + EMA_ALPHA * lIntervalEMA) / EIGHTEEN_DECIMAL_NUMBER_U;
    }
    
    function updateFeedback(uint72 scid, int256 err ) private returns (int256 boundedPiOutput) {
        // update feedback mechanism
        int256 _error_integral = errorIntegral[scid];
        int256 _new_error_integral = _error_integral + err;

        boundedPiOutput = boundPiOutput(getRawPiOutput(err, _new_error_integral));

        errorIntegral[scid] = clampErrorIntegral(boundedPiOutput, _error_integral, _new_error_integral, err);
        lastOutput[scid] = boundedPiOutput;

        return boundedPiOutput; 
    }

    function getUpdatersChunk(uint256 start, uint256 count) public view returns (TotalReward[] memory rewardsChunk) { 
        rewardsChunk = new TotalReward[](count);
        for (uint256 i = 0; i < count; ++i) { 
            address updater = updaters[start + i];
            if (updater == address(0)) {
                break;
            }

           TotalReward memory tr = TotalReward(updater, 0);
            for (uint64 season = 0; season <= seasonID; ++season) {
                tr.total_rewards += rewards[season][updater].reward; // ensure the updater exists in the mapping
            }
            rewardsChunk[i] = tr;
        }

        return rewardsChunk;
    }

    function getSeasonUpdatersChunk(uint64 season, uint256 start, uint256 count) public view returns (TotalRewardRecord[] memory rewardsChunk) { 
        rewardsChunk = new TotalRewardRecord[](count);
        for (uint256 i = 0; i < count; ++i) { 
            address updater = updaters[start + i];
            if (updater == address(0)) {
                break;
            }
 
            rewardsChunk[i] = TotalRewardRecord(updater, rewards[season][updater]);
        }

        return rewardsChunk;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"o","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint8","name":"system_id","type":"uint8"},{"indexed":false,"internalType":"uint64","name":"chain_id","type":"uint64"},{"indexed":false,"internalType":"uint240","name":"new_value","type":"uint240"},{"indexed":false,"internalType":"uint240","name":"raw_deviation","type":"uint240"},{"indexed":false,"internalType":"uint48","name":"time_since","type":"uint48"},{"indexed":false,"internalType":"uint256","name":"time_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deviation_reward","type":"uint256"},{"indexed":false,"internalType":"int256","name":"reward_multiplier","type":"int256"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rewards_frozen","type":"bool"}],"name":"RewardsFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint8","name":"system_id","type":"uint8"},{"indexed":false,"internalType":"uint64","name":"chain_id","type":"uint64"},{"indexed":false,"internalType":"uint240","name":"new_value","type":"uint240"},{"indexed":false,"internalType":"uint240","name":"raw_deviation","type":"uint240"},{"indexed":false,"internalType":"uint48","name":"time_since","type":"uint48"},{"indexed":false,"internalType":"uint256","name":"time_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deviation_reward","type":"uint256"},{"indexed":false,"internalType":"int256","name":"reward_multiplier","type":"int256"}],"name":"RewardsSimulated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rewards_on","type":"bool"}],"name":"RewardsToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"id","type":"uint64"}],"name":"SeasonChanged","type":"event"},{"inputs":[{"internalType":"bytes","name":"dat","type":"bytes"}],"name":"checkRewards","outputs":[{"components":[{"internalType":"uint8","name":"system_id","type":"uint8"},{"internalType":"uint64","name":"chain_id","type":"uint64"},{"internalType":"uint64","name":"height","type":"uint64"},{"internalType":"uint240","name":"gas_price","type":"uint240"},{"internalType":"uint256","name":"time_reward","type":"uint256"},{"internalType":"uint256","name":"deviation_reward","type":"uint256"}],"internalType":"struct RewardProxy.EnhancedReward[]","name":"enhancedRewards","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAddressRewardRecords","outputs":[{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"internalType":"struct RewardProxy.RewardRecord[]","name":"rec","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAddressRewards","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"season","type":"uint64"}],"name":"getAddressSeasonalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"season","type":"uint64"}],"name":"getAddressSeasonalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCoefficients","outputs":[{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSeason","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getErrorIntegrals","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getFromIntervalEMAs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGameParams","outputs":[{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"","type":"tuple"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint32","name":"","type":"uint32"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getLastOutput","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardType","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getScales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"season","type":"uint64"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSeasonUpdatersChunk","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"internalType":"struct RewardProxy.RewardRecord","name":"rewards","type":"tuple"}],"internalType":"struct RewardProxy.TotalRewardRecord[]","name":"rewardsChunk","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getUpdatersChunk","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"total_rewards","type":"uint256"}],"internalType":"struct RewardProxy.TotalReward[]","name":"rewardsChunk","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lOracle","type":"address"},{"internalType":"int256","name":"lOutputUpperBound","type":"int256"},{"internalType":"int256","name":"lOutputLowerBound","type":"int256"},{"internalType":"uint256","name":"lTargetTimeSince","type":"uint256"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"rl","type":"tuple"},{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"co","type":"tuple"},{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"coeffs","type":"tuple"},{"internalType":"uint32","name":"lMinWindowSize","type":"uint32"},{"internalType":"uint16","name":"lRewardType","type":"uint16"}],"name":"initialSetParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"season","type":"uint64"},{"internalType":"address","name":"ow","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint64","name":"count","type":"uint64"},{"internalType":"uint256","name":"tr","type":"uint256"}],"name":"ownerModifyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"stat","type":"bool"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"f","type":"bool"}],"name":"setFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"co","type":"tuple"},{"internalType":"int256","name":"lOutputUpperBound","type":"int256"},{"internalType":"int256","name":"lOutputLowerBound","type":"int256"},{"internalType":"uint256","name":"lTargetTimeSince","type":"uint256"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"rl","type":"tuple"},{"internalType":"uint32","name":"lMinWindowSize","type":"uint32"}],"name":"setParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rType","type":"uint16"}],"name":"setRewardType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"f","type":"bool"}],"name":"setRewardsProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"f","type":"uint64"}],"name":"setSeasonID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"dat","type":"bytes"}],"name":"submitUpdate","outputs":[{"components":[{"internalType":"uint8","name":"system_id","type":"uint8"},{"internalType":"uint64","name":"chain_id","type":"uint64"},{"internalType":"uint64","name":"height","type":"uint64"},{"internalType":"uint240","name":"gas_price","type":"uint240"},{"internalType":"uint256","name":"time_reward","type":"uint256"},{"internalType":"uint256","name":"deviation_reward","type":"uint256"}],"internalType":"struct RewardProxy.EnhancedReward[]","name":"enhancedRewards","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"coeffs","type":"tuple"}],"name":"updateCoeffs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"int256[]","name":"errorIntegrals","type":"int256[]"}],"name":"updateErrorIntegrals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"uint256[]","name":"lIntervalEMAs","type":"uint256[]"}],"name":"updateIntervalEMA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"uint256[]","name":"scale","type":"uint256[]"}],"name":"updateScales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f5ffd5b50604051615c37380380615c3783398181016040528101906100319190610145565b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f5f5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050610170565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610114826100eb565b9050919050565b6101248161010a565b811461012e575f5ffd5b50565b5f8151905061013f8161011b565b92915050565b5f6020828403121561015a576101596100e7565b5b5f61016784828501610131565b91505092915050565b615aba8061017d5f395ff3fe6080604052600436106101e2575f3560e01c8063a03cfb2711610101578063c0d5536f11610094578063e45b21fc11610063578063e45b21fc146106ff578063e627f2db1461073b578063ec97942b14610765578063f57c2225146107a1576101e2565b8063c0d5536f14610655578063d1767a4a1461067d578063d3b30b75146106ad578063dbe5cc0a146106d7576101e2565b8063b18b78dd116100d0578063b18b78dd1461059f578063b5f0d35c146105c9578063bb4bb81d146105f1578063bbb5b88514610619576101e2565b8063a03cfb27146104d5578063ab63497d14610511578063abc71aec14610539578063afd4c8d614610575576101e2565b80636aa3241b116101795780637adbf973116101485780637adbf9731461041f5780637b0acfab146104475780638a51f8601461046f57806399e3b18d14610499576101e2565b80636aa3241b146103765780636dc7ea911461039e57806371123e92146103c65780637586a386146103f0576101e2565b80635081505c116101b55780635081505c146102ae5780635acef21b146102d65780635ce844321461031257806364a798961461034e576101e2565b80630e0264de146101e65780631a55a5c51461022257806329c4df001461025e5780632b0a328b14610286575b5f5ffd5b3480156101f1575f5ffd5b5061020c6004803603810190610207919061395f565b6107dd565b60405161021991906139b5565b60405180910390f35b34801561022d575f5ffd5b5061024860048036038101906102439190613a0c565b610849565b60405161025591906139b5565b60405180910390f35b348015610269575f5ffd5b50610284600480360381019061027f9190613aed565b610879565b005b348015610291575f5ffd5b506102ac60048036038101906102a79190613b95565b6109d8565b005b3480156102b9575f5ffd5b506102d460048036038101906102cf9190613d0d565b610b03565b005b3480156102e1575f5ffd5b506102fc60048036038101906102f79190613dd4565b610b37565b6040516103099190613f44565b60405180910390f35b34801561031d575f5ffd5b506103386004803603810190610333919061409c565b610cee565b6040516103459190614266565b60405180910390f35b348015610359575f5ffd5b50610374600480360381019061036f91906142db565b611614565b005b348015610381575f5ffd5b5061039c6004803603810190610397919061438e565b611773565b005b3480156103a9575f5ffd5b506103c460048036038101906103bf91906142db565b611850565b005b3480156103d1575f5ffd5b506103da6119af565b6040516103e791906139b5565b60405180910390f35b3480156103fb575f5ffd5b506104046119b5565b60405161041696959493929190614494565b60405180910390f35b34801561042a575f5ffd5b50610445600480360381019061044091906144f4565b611a84565b005b348015610452575f5ffd5b5061046d6004803603810190610468919061451f565b611b50565b005b34801561047a575f5ffd5b50610483611cf1565b6040516104909190614559565b60405180910390f35b3480156104a4575f5ffd5b506104bf60048036038101906104ba91906144f4565b611d08565b6040516104cc91906139b5565b60405180910390f35b3480156104e0575f5ffd5b506104fb60048036038101906104f691906144f4565b611dc4565b604051610508919061461a565b60405180910390f35b34801561051c575f5ffd5b506105376004803603810190610532919061463a565b611f37565b005b348015610544575f5ffd5b5061055f600480360381019061055a9190614665565b612021565b60405161056c9190614778565b60405180910390f35b348015610580575f5ffd5b50610589612220565b6040516105969190614806565b60405180910390f35b3480156105aa575f5ffd5b506105b3612294565b6040516105c0919061482e565b60405180910390f35b3480156105d4575f5ffd5b506105ef60048036038101906105ea9190614847565b6122bc565b005b3480156105fc575f5ffd5b5061061760048036038101906106129190614885565b612411565b005b348015610624575f5ffd5b5061063f600480360381019061063a9190613a0c565b6124ba565b60405161064c91906148b0565b60405180910390f35b348015610660575f5ffd5b5061067b6004803603810190610676919061438e565b6124ea565b005b6106976004803603810190610692919061409c565b6125c6565b6040516106a49190614266565b60405180910390f35b3480156106b8575f5ffd5b506106c1612c8b565b6040516106ce91906148d8565b60405180910390f35b3480156106e2575f5ffd5b506106fd60048036038101906106f891906148f1565b612ca6565b005b34801561070a575f5ffd5b5061072560048036038101906107209190613a0c565b612da9565b60405161073291906139b5565b60405180910390f35b348015610746575f5ffd5b5061074f612dd9565b60405161075c91906139b5565b60405180910390f35b348015610770575f5ffd5b5061078b60048036038101906107869190613a0c565b612de2565b60405161079891906148b0565b60405180910390f35b3480156107ac575f5ffd5b506107c760048036038101906107c2919061395f565b612e12565b6040516107d491906139b5565b60405180910390f35b5f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154905092915050565b5f60075f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906149fc565b60405180910390fd5b81819050848490501461094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190614a8a565b60405180910390fd5b5f5f90505b848490508110156109d15782828281811061096d5761096c614aa8565b5b9050602002013560015f87878581811061098a57610989614aa8565b5b905060200201602081019061099f9190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555080600101905061094f565b5050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890614b1f565b60405180910390fd5b60405180604001604052808481526020018367ffffffffffffffff1681525060055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155905050806004819055505050505050565b610b11848989898987612ca6565b610b1a89611a84565b610b2381612411565b610b2c83611b50565b505050505050505050565b60608167ffffffffffffffff811115610b5357610b52613f78565b5b604051908082528060200260200182016040528015610b8c57816020015b610b796136a8565b815260200190600190039081610b715790505b5090505f5f90505b82811015610ce6575f600a5f8387610bac9190614b6a565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c145750610ce6565b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160055f8967ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201548152602001600182015481525050815250838381518110610ccf57610cce614aa8565b5b602002602001018190525050806001019050610b94565b509392505050565b6060600c5f9054906101000a900460ff1615610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690614be7565b60405180910390fd5b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e195131846040518263ffffffff1660e01b8152600401610d9a9190614c65565b5f60405180830381865afa158015610db4573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ddc9190614f26565b9050805167ffffffffffffffff811115610df957610df8613f78565b5b604051908082528060200260200182016040528015610e3257816020015b610e1f6136dd565b815260200190600190039081610e175790505b5091505f815167ffffffffffffffff811115610e5157610e50613f78565b5b604051908082528060200260200182016040528015610e7f5781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff811115610e9e57610e9d613f78565b5b604051908082528060200260200182016040528015610ecc5781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff811115610eeb57610eea613f78565b5b604051908082528060200260200182016040528015610f195781602001602082028036833780820191505090505b5090505f5f90505b845181101561160a575f858281518110610f3e57610f3d614aa8565b5b602002602001015190505f815f01519050600c60029054906101000a900461ffff1661ffff16816040015161ffff1614610f795750506115fd565b5f60075f610f8e845f01518560200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205403610fbe5750506115fd565b5f82604001515f015167ffffffffffffffff1603611075576040518060c00160405280825f015160ff168152602001826020015167ffffffffffffffff16815260200183602001515f015167ffffffffffffffff1681526020018360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525088848151811061106357611062614aa8565b5b602002602001018190525050506115fd565b5f5f8360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168460400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611156110f2578360200151604001518460400151604001516110eb9190614f6d565b9050611111565b83604001516040015184602001516040015161110e9190614f6d565b90505b61117260075f611128865f01518760200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e94565b9150505f670de0b6b3a764000084602001516020015185604001516020015161119b9190614fbe565b65ffffffffffff166111ad9190614ff7565b90505f5f5f6111c58c89885f01518960200151612ebc565b915091505f81156111f2578a83815181106111e3576111e2614aa8565b5b6020026020010151905061122d565b60065f611206895f01518a60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505b811561134d575f6112658b858151811061124a57611249614aa8565b5b60200260200101516103e8886112609190615065565b612f91565b9050808b858151811061127b5761127a614aa8565b5b60200260200101818152505060035f9054906101000a900463ffffffff1663ffffffff166001836112ac9190614b6a565b10156112c257670de0b6b3a76400009450611347565b5f6112cf60165483612ff2565b90505f8e86815181106112e5576112e4614aa8565b5b6020026020010151905061130c6113078384846113029190615095565b613025565b6130c6565b96506113258782848461131f9190615095565b856130f8565b8f878151811061133857611337614aa8565b5b60200260200101818152505050505b5061149d565b5f61139c60085f6113658b5f01518c60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8886113979190615065565b612f91565b9050808b8b815181106113b2576113b1614aa8565b5b60200260200101818152505060035f9054906101000a900463ffffffff1663ffffffff166001836113e39190614b6a565b10156113f957670de0b6b3a7640000945061149b565b5f61140660165483612ff2565b90505f60015f61141d8c5f01518d60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054905061146061145b8384846114569190615095565b613025565b6130c6565b9650611479878284846114739190615095565b856130f8565b8f8d8151811061148c5761148b614aa8565b5b60200260200101818152505050505b505b81156114d4576001816114b09190614b6a565b8b84815181106114c3576114c2614aa8565b5b602002602001018181525050611501565b6001816114e19190614b6a565b8b8a815181106114f4576114f3614aa8565b5b6020026020010181815250505b5050505f5f61151d6103e88561151791906150d6565b8661316b565b915091506040518060c00160405280875f015160ff168152602001876020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001670de0b6b3a764000084866115a6919061513e565b6115b091906150d6565b8152602001670de0b6b3a764000083866115ca919061513e565b6115d491906150d6565b8152508d89815181106115ea576115e9614aa8565b5b6020026020010181905250505050505050505b8080600101915050610f21565b5050505050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906151fe565b60405180910390fd5b8181905084849050146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90615266565b60405180910390fd5b5f5f90505b8484905081101561176c5782828281811061170857611707614aa8565b5b9050602002013560075f87878581811061172557611724614aa8565b5b905060200201602081019061173a9190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508060010190506116ea565b5050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614b1f565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f9bec7d73cd5cab20df3be726efbc75e327e8215bdeea29bec8e4ee6522edb292816040516118459190615293565b60405180910390a150565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d0906152f6565b60405180910390fd5b818190508484905014611921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119189061535e565b60405180910390fd5b5f5f90505b848490508110156119a85782828281811061194457611943614aa8565b5b9050602002013560085f87878581811061196157611960614aa8565b5b90506020020160208101906119769190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550806001019050611926565b5050505050565b600b5481565b6119bd613744565b5f5f5f5f6119c961376b565b601160145460155460165460035f9054906101000a900463ffffffff166040518060800160405280600d548152602001600e548152602001600f548152602001601054815250856040518060600160405290815f82015f9054906101000a900460090b60090b60090b81526020015f8201600a9054906101000a900460090b60090b60090b81526020015f820160149054906101000a900460090b60090b60090b815250509550955095509550955095509550909192939495565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0490614b1f565b60405180910390fd5b8060175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906153ec565b60405180910390fd5b805f016020810190611beb9190615434565b60125f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806020016020810190611c309190615434565b6012600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806040016020810190611c769190615434565b60135f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806060016020810190611cbb9190615434565b6013600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555050565b5f600c60029054906101000a900461ffff16905090565b5f5f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611611dbe5760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015482611dab9190614b6a565b915080611db79061545f565b9050611d0e565b50919050565b606060015f5f9054906101000a900467ffffffffffffffff16611de7919061548e565b67ffffffffffffffff1667ffffffffffffffff811115611e0a57611e09613f78565b5b604051908082528060200260200182016040528015611e4357816020015b611e3061378f565b815260200190600190039081611e285790505b5090505f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611611f315760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201548152602001600182015481525050828267ffffffffffffffff1681518110611f1557611f14614aa8565b5b602002602001018190525080611f2a9061545f565b9050611e4b565b50919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790615513565b60405180910390fd5b805f5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f81ede9152c923222ead1a978d837e30f8c546655309d2bf3ec3ee115cf6f5fda8160405161201691906148d8565b60405180910390a150565b60608167ffffffffffffffff81111561203d5761203c613f78565b5b60405190808252806020026020018201604052801561207657816020015b6120636137a7565b81526020019060019003908161205b5790505b5090505f5f90505b82811015612219575f600a5f83876120969190614b6a565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120fe5750612219565b5f60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090505f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16116121ec5760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154826020018181516121d49190614b6a565b91508181525050806121e59061545f565b9050612131565b508084848151811061220157612200614aa8565b5b6020026020010181905250505080600101905061207e565b5092915050565b6122286137d5565b604051806080016040528060125f9054906101000a9004600b0b600b0b81526020016012600c9054906101000a9004600b0b600b0b815260200160135f9054906101000a9004600b0b600b0b81526020016013600c9054906101000a9004600b0b600b0b815250905090565b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c906155a1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b957806123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90615609565b60405180910390fd5b5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190615671565b60405180910390fd5b80600c60026101000a81548161ffff021916908361ffff16021790555050565b5f60015f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614b1f565b60405180910390fd5b80600c5f6101000a81548160ff0219169083151502179055507f21c6565ddd14783c7c998f821309e096af992922c439470a4863ee76c1fdc22c816040516125bb9190615293565b60405180910390a150565b6060600c5f9054906101000a900460ff1615612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614be7565b60405180910390fd5b6126203361318a565b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663927b21ac34856040518363ffffffff1660e01b815260040161267c9190614c65565b5f6040518083038185885af1158015612697573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f820116820180604052508101906126c09190614f26565b9050805167ffffffffffffffff8111156126dd576126dc613f78565b5b60405190808252806020026020018201604052801561271657816020015b6127036136dd565b8152602001906001900390816126fb5790505b509150612721613805565b5f5f5f90505f5f90505b8451811015612c695784818151811061274757612746614aa8565b5b60200260200101519350600c60029054906101000a900461ffff1661ffff16845f01516040015161ffff1603612c5c575f61278f855f01515f0151865f015160200151612e7f565b90505f5f60075f8468ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f81036127cc57505050612c5c565b5f87604001515f015167ffffffffffffffff160361288a576040518060c00160405280885f01515f015160ff168152602001885f01516020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525089858151811061287757612876614aa8565b5b6020026020010181905250505050612c5c565b8660200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168760400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115612905578660200151604001518760400151604001516128fe9190614f6d565b9550612924565b8660400151604001518760200151604001516129219190614f6d565b95505b61294e81877dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e94565b9150505f670de0b6b3a76400008760200151602001518860400151602001516129779190614fbe565b65ffffffffffff166129899190614ff7565b90505f5f6129a46103e88461299e91906150d6565b8561316b565b915091505f6129e88660065f8968ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8876129e39190615065565b61331b565b9050600160065f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054612a1e9190614b6a565b60065f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055505f670de0b6b3a76400008483612a5f919061513e565b612a6991906150d6565b90505f670de0b6b3a76400008484612a81919061513e565b612a8b91906150d6565b9050600c60019054906101000a900460ff1615612b4457612ab68183612ab19190614b6a565b6133d8565b7faa47a68f67393b40c7938796558ec35f7f3a9e558583fb98c6e383428239c218338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c612b069190615065565b88888b604051612b1e999897969594939291906156bc565b60405180910390a18082612b329190614b6a565b8a612b3d9190614b6a565b9950612bb5565b7f59d727fbfc47d17e8340552ec9defc64a6eb6bdd1eaccacc533d66c5c528160e338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c612b949190615065565b88888b604051612bac999897969594939291906156bc565b60405180910390a15b6040518060c001604052808d5f01515f015160ff1681526020018d5f01516020015167ffffffffffffffff1681526020018d604001515f015167ffffffffffffffff1681526020018d60400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152508e8a81518110612c4857612c47614aa8565b5b602002602001018190525050505050505050505b808060010191505061272b565b508060045f828254612c7b9190614b6a565b9250508190555050505050919050565b5f5f5f9054906101000a900467ffffffffffffffff16905090565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615791565b60405180910390fd5b8560118181612d3e919061599b565b9050508460148190555083601581905550826016819055508060035f6101000a81548163ffffffff021916908363ffffffff160217905550815f0135600d819055508160200135600e819055508160400135600f819055508160600135601081905550505050505050565b5f60085f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f600454905090565b5f60025f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154905092915050565b5f8290508060401b9050818101905092915050565b5f82670de0b6b3a764000083612eaa9190614ff7565b612eb49190615065565b905092915050565b5f5f5f5f90505b8651811015612f80575f8560ff1614158015612ee957505f8467ffffffffffffffff1614155b8015612f1a57508460ff16878281518110612f0757612f06614aa8565b5b60200260200101515f01515f015160ff16145b8015612f5a57508367ffffffffffffffff16878281518110612f3f57612f3e614aa8565b5b60200260200101515f01516020015167ffffffffffffffff16145b15612f755785811115612f74578060019250925050612f88565b5b806001019050612ec3565b505f5f915091505b94509492505050565b5f670de0b6b3a764000083670b5ac4075a691740612faf9190614ff7565b83670b5ac4075a691740670de0b6b3a7640000612fcc91906159a9565b612fd69190614ff7565b612fe09190614b6a565b612fea9190615065565b905092915050565b5f82670de0b6b3a7640000838561300991906159dc565b613013919061513e565b61301d91906150d6565b905092915050565b5f5f670de0b6b3a764000060115f015f9054906101000a900460090b60090b8561304f919061513e565b61305991906150d6565b90505f670de0b6b3a764000060115f01600a9054906101000a900460090b60090b85613085919061513e565b61308f91906150d6565b9050808260115f0160149054906101000a900460090b60090b6130b29190615095565b6130bc9190615095565b9250505092915050565b5f6015548212156130db5760155490506130f3565b6014548213156130ef5760145490506130f3565b8190505b919050565b5f6015548514801561310957505f82135b801561311457505f84135b1561312c57818361312591906159dc565b9050613163565b6014548514801561313c57505f82125b801561314757505f84125b1561315f57818361315891906159dc565b9050613163565b8290505b949350505050565b5f5f61317684613487565b61317f84613521565b915091509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ef90615a66565b60405180910390fd5b5f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16116132b0575f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154111561329d5750613318565b80806132a89061545f565b9150506131fd565b5080600a5f600b5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b546133119190614b6a565b600b819055505b50565b5f5f61334e60085f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205484612f91565b90508060085f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555060035f9054906101000a900463ffffffff1663ffffffff166001856133a19190614b6a565b10156133b857670de0b6b3a76400009150506133d1565b6133cd856133c860165484612ff2565b6135bd565b9150505b9392505050565b5f60055f5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905081815f015f8282546134619190614b6a565b925050819055506001816001015f82825461347c9190614b6a565b925050819055505050565b5f61351a6135126ec097ce7bc90715b34b9f1000000000848560135f9054906101000a9004600b0b600b0b6134bc919061513e565b6134c6919061513e565b6134d091906150d6565b670de0b6b3a76400008560125f9054906101000a9004600b0b600b0b6134f6919061513e565b61350091906150d6565b61350a9190615095565b600e54613677565b600d5461368f565b9050919050565b5f6135b66135ae6ec097ce7bc90715b34b9f100000000084856013600c9054906101000a9004600b0b600b0b613557919061513e565b613561919061513e565b61356b91906150d6565b670de0b6b3a7640000856012600c9054906101000a9004600b0b600b0b613592919061513e565b61359c91906150d6565b6135a69190615095565b601054613677565b600f5461368f565b9050919050565b5f5f60015f8568ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f83826135f69190615095565b905061360a6136058583613025565b6130c6565b9250613618838383876130f8565b60015f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508260025f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550505092915050565b5f8183126136855781613687565b825b905092915050565b5f8183121561369e57816136a0565b825b905092915050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016136d761378f565b81525090565b6040518060c001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180606001604052805f60090b81526020015f60090b81526020015f60090b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180608001604052805f600b0b81526020015f600b0b81526020015f600b0b81526020015f600b0b81525090565b6040518060600160405280613818613838565b8152602001613825613867565b8152602001613832613867565b81525090565b60405180606001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f61ffff1681525090565b60405180606001604052805f67ffffffffffffffff1681526020015f65ffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138f1826138c8565b9050919050565b613901816138e7565b811461390b575f5ffd5b50565b5f8135905061391c816138f8565b92915050565b5f67ffffffffffffffff82169050919050565b61393e81613922565b8114613948575f5ffd5b50565b5f8135905061395981613935565b92915050565b5f5f60408385031215613975576139746138c0565b5b5f6139828582860161390e565b92505060206139938582860161394b565b9150509250929050565b5f819050919050565b6139af8161399d565b82525050565b5f6020820190506139c85f8301846139a6565b92915050565b5f68ffffffffffffffffff82169050919050565b6139eb816139ce565b81146139f5575f5ffd5b50565b5f81359050613a06816139e2565b92915050565b5f60208284031215613a2157613a206138c0565b5b5f613a2e848285016139f8565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613a5857613a57613a37565b5b8235905067ffffffffffffffff811115613a7557613a74613a3b565b5b602083019150836020820283011115613a9157613a90613a3f565b5b9250929050565b5f5f83601f840112613aad57613aac613a37565b5b8235905067ffffffffffffffff811115613aca57613ac9613a3b565b5b602083019150836020820283011115613ae657613ae5613a3f565b5b9250929050565b5f5f5f5f60408587031215613b0557613b046138c0565b5b5f85013567ffffffffffffffff811115613b2257613b216138c4565b5b613b2e87828801613a43565b9450945050602085013567ffffffffffffffff811115613b5157613b506138c4565b5b613b5d87828801613a98565b925092505092959194509250565b613b748161399d565b8114613b7e575f5ffd5b50565b5f81359050613b8f81613b6b565b92915050565b5f5f5f5f5f60a08688031215613bae57613bad6138c0565b5b5f613bbb8882890161394b565b9550506020613bcc8882890161390e565b9450506040613bdd88828901613b81565b9350506060613bee8882890161394b565b9250506080613bff88828901613b81565b9150509295509295909350565b5f819050919050565b613c1e81613c0c565b8114613c28575f5ffd5b50565b5f81359050613c3981613c15565b92915050565b5f5ffd5b5f60808284031215613c5857613c57613c3f565b5b81905092915050565b5f60608284031215613c7657613c75613c3f565b5b81905092915050565b5f60808284031215613c9457613c93613c3f565b5b81905092915050565b5f63ffffffff82169050919050565b613cb581613c9d565b8114613cbf575f5ffd5b50565b5f81359050613cd081613cac565b92915050565b5f61ffff82169050919050565b613cec81613cd6565b8114613cf6575f5ffd5b50565b5f81359050613d0781613ce3565b92915050565b5f5f5f5f5f5f5f5f5f6102208a8c031215613d2b57613d2a6138c0565b5b5f613d388c828d0161390e565b9950506020613d498c828d01613c2b565b9850506040613d5a8c828d01613c2b565b9750506060613d6b8c828d01613b81565b9650506080613d7c8c828d01613c43565b955050610100613d8e8c828d01613c61565b945050610160613da08c828d01613c7f565b9350506101e0613db28c828d01613cc2565b925050610200613dc48c828d01613cf9565b9150509295985092959850929598565b5f5f5f60608486031215613deb57613dea6138c0565b5b5f613df88682870161394b565b9350506020613e0986828701613b81565b9250506040613e1a86828701613b81565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e56816138e7565b82525050565b613e658161399d565b82525050565b604082015f820151613e7f5f850182613e5c565b506020820151613e926020850182613e5c565b50505050565b606082015f820151613eac5f850182613e4d565b506020820151613ebf6020850182613e6b565b50505050565b5f613ed08383613e98565b60608301905092915050565b5f602082019050919050565b5f613ef282613e24565b613efc8185613e2e565b9350613f0783613e3e565b805f5b83811015613f37578151613f1e8882613ec5565b9750613f2983613edc565b925050600181019050613f0a565b5085935050505092915050565b5f6020820190508181035f830152613f5c8184613ee8565b905092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613fae82613f68565b810181811067ffffffffffffffff82111715613fcd57613fcc613f78565b5b80604052505050565b5f613fdf6138b7565b9050613feb8282613fa5565b919050565b5f67ffffffffffffffff82111561400a57614009613f78565b5b61401382613f68565b9050602081019050919050565b828183375f83830152505050565b5f61404061403b84613ff0565b613fd6565b90508281526020810184848401111561405c5761405b613f64565b5b614067848285614020565b509392505050565b5f82601f83011261408357614082613a37565b5b813561409384826020860161402e565b91505092915050565b5f602082840312156140b1576140b06138c0565b5b5f82013567ffffffffffffffff8111156140ce576140cd6138c4565b5b6140da8482850161406f565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60ff82169050919050565b6141218161410c565b82525050565b61413081613922565b82525050565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61416881614136565b82525050565b60c082015f8201516141825f850182614118565b5060208201516141956020850182614127565b5060408201516141a86040850182614127565b5060608201516141bb606085018261415f565b5060808201516141ce6080850182613e5c565b5060a08201516141e160a0850182613e5c565b50505050565b5f6141f2838361416e565b60c08301905092915050565b5f602082019050919050565b5f614214826140e3565b61421e81856140ed565b9350614229836140fd565b805f5b8381101561425957815161424088826141e7565b975061424b836141fe565b92505060018101905061422c565b5085935050505092915050565b5f6020820190508181035f83015261427e818461420a565b905092915050565b5f5f83601f84011261429b5761429a613a37565b5b8235905067ffffffffffffffff8111156142b8576142b7613a3b565b5b6020830191508360208202830111156142d4576142d3613a3f565b5b9250929050565b5f5f5f5f604085870312156142f3576142f26138c0565b5b5f85013567ffffffffffffffff8111156143105761430f6138c4565b5b61431c87828801613a43565b9450945050602085013567ffffffffffffffff81111561433f5761433e6138c4565b5b61434b87828801614286565b925092505092959194509250565b5f8115159050919050565b61436d81614359565b8114614377575f5ffd5b50565b5f8135905061438881614364565b92915050565b5f602082840312156143a3576143a26138c0565b5b5f6143b08482850161437a565b91505092915050565b5f8160090b9050919050565b6143ce816143b9565b82525050565b606082015f8201516143e85f8501826143c5565b5060208201516143fb60208501826143c5565b50604082015161440e60408501826143c5565b50505050565b61441d81613c0c565b82525050565b61442c81613c9d565b82525050565b61443b81613c0c565b82525050565b608082015f8201516144555f850182614432565b5060208201516144686020850182614432565b50604082015161447b6040850182614432565b50606082015161448e6060850182614432565b50505050565b5f610160820190506144a85f8301896143d4565b6144b56060830188614414565b6144c26080830187614414565b6144cf60a08301866139a6565b6144dc60c0830185614423565b6144e960e0830184614441565b979650505050505050565b5f60208284031215614509576145086138c0565b5b5f6145168482850161390e565b91505092915050565b5f60808284031215614534576145336138c0565b5b5f61454184828501613c7f565b91505092915050565b61455381613cd6565b82525050565b5f60208201905061456c5f83018461454a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6145a68383613e6b565b60408301905092915050565b5f602082019050919050565b5f6145c882614572565b6145d2818561457c565b93506145dd8361458c565b805f5b8381101561460d5781516145f4888261459b565b97506145ff836145b2565b9250506001810190506145e0565b5085935050505092915050565b5f6020820190508181035f83015261463281846145be565b905092915050565b5f6020828403121561464f5761464e6138c0565b5b5f61465c8482850161394b565b91505092915050565b5f5f6040838503121561467b5761467a6138c0565b5b5f61468885828601613b81565b925050602061469985828601613b81565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b604082015f8201516146e05f850182613e4d565b5060208201516146f36020850182613e5c565b50505050565b5f61470483836146cc565b60408301905092915050565b5f602082019050919050565b5f614726826146a3565b61473081856146ad565b935061473b836146bd565b805f5b8381101561476b57815161475288826146f9565b975061475d83614710565b92505060018101905061473e565b5085935050505092915050565b5f6020820190508181035f830152614790818461471c565b905092915050565b5f81600b0b9050919050565b6147ad81614798565b82525050565b608082015f8201516147c75f8501826147a4565b5060208201516147da60208501826147a4565b5060408201516147ed60408501826147a4565b50606082015161480060608501826147a4565b50505050565b5f6080820190506148195f8301846147b3565b92915050565b614828816138e7565b82525050565b5f6020820190506148415f83018461481f565b92915050565b5f5f6040838503121561485d5761485c6138c0565b5b5f61486a8582860161390e565b925050602061487b8582860161437a565b9150509250929050565b5f6020828403121561489a576148996138c0565b5b5f6148a784828501613cf9565b91505092915050565b5f6020820190506148c35f830184614414565b92915050565b6148d281613922565b82525050565b5f6020820190506148eb5f8301846148c9565b92915050565b5f5f5f5f5f5f610160878903121561490c5761490b6138c0565b5b5f61491989828a01613c61565b965050606061492a89828a01613c2b565b955050608061493b89828a01613c2b565b94505060a061494c89828a01613b81565b93505060c061495d89828a01613c43565b92505061014061496f89828a01613cc2565b9150509295509295509295565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e20736574206572726f7220696e74656772615f8201527f6c73000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149e660228361497c565b91506149f18261498c565b604082019050919050565b5f6020820190508181035f830152614a13816149da565b9050919050565b7f7363696420616e6420696e74656772616c73206c656e677468206d69736d61745f8201527f6368000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a7460228361497c565b9150614a7f82614a1a565b604082019050919050565b5f6020820190508181035f830152614aa181614a68565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206f776e65722063616e206d6f646966792076616c756573000000005f82015250565b5f614b09601c8361497c565b9150614b1482614ad5565b602082019050919050565b5f6020820190508181035f830152614b3681614afd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614b748261399d565b9150614b7f8361399d565b9250828201905080821115614b9757614b96614b3d565b5b92915050565b7f5265776172647320636f6e74726163742069732066726f7a656e0000000000005f82015250565b5f614bd1601a8361497c565b9150614bdc82614b9d565b602082019050919050565b5f6020820190508181035f830152614bfe81614bc5565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f614c3782614c05565b614c418185614c0f565b9350614c51818560208601614c1f565b614c5a81613f68565b840191505092915050565b5f6020820190508181035f830152614c7d8184614c2d565b905092915050565b5f67ffffffffffffffff821115614c9f57614c9e613f78565b5b602082029050602081019050919050565b5f5ffd5b614cbd8161410c565b8114614cc7575f5ffd5b50565b5f81519050614cd881614cb4565b92915050565b5f81519050614cec81613935565b92915050565b5f81519050614d0081613ce3565b92915050565b5f60608284031215614d1b57614d1a614cb0565b5b614d256060613fd6565b90505f614d3484828501614cca565b5f830152506020614d4784828501614cde565b6020830152506040614d5b84828501614cf2565b60408301525092915050565b5f65ffffffffffff82169050919050565b614d8181614d67565b8114614d8b575f5ffd5b50565b5f81519050614d9c81614d78565b92915050565b614dab81614136565b8114614db5575f5ffd5b50565b5f81519050614dc681614da2565b92915050565b5f60608284031215614de157614de0614cb0565b5b614deb6060613fd6565b90505f614dfa84828501614cde565b5f830152506020614e0d84828501614d8e565b6020830152506040614e2184828501614db8565b60408301525092915050565b5f6101208284031215614e4357614e42614cb0565b5b614e4d6060613fd6565b90505f614e5c84828501614d06565b5f830152506060614e6f84828501614dcc565b60208301525060c0614e8384828501614dcc565b60408301525092915050565b5f614ea1614e9c84614c85565b613fd6565b9050808382526020820190506101208402830185811115614ec557614ec4613a3f565b5b835b81811015614eef5780614eda8882614e2d565b84526020840193505061012081019050614ec7565b5050509392505050565b5f82601f830112614f0d57614f0c613a37565b5b8151614f1d848260208601614e8f565b91505092915050565b5f60208284031215614f3b57614f3a6138c0565b5b5f82015167ffffffffffffffff811115614f5857614f576138c4565b5b614f6484828501614ef9565b91505092915050565b5f614f7782614136565b9150614f8283614136565b925082820390507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115614fb857614fb7614b3d565b5b92915050565b5f614fc882614d67565b9150614fd383614d67565b9250828203905065ffffffffffff811115614ff157614ff0614b3d565b5b92915050565b5f6150018261399d565b915061500c8361399d565b925082820261501a8161399d565b9150828204841483151761503157615030614b3d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506f8261399d565b915061507a8361399d565b92508261508a57615089615038565b5b828204905092915050565b5f61509f82613c0c565b91506150aa83613c0c565b92508282019050828112155f8312168382125f8412151617156150d0576150cf614b3d565b5b92915050565b5f6150e082613c0c565b91506150eb83613c0c565b9250826150fb576150fa615038565b5b60015f0383147f80000000000000000000000000000000000000000000000000000000000000008314161561513357615132614b3d565b5b828205905092915050565b5f61514882613c0c565b915061515383613c0c565b925082820261516181613c0c565b91507f800000000000000000000000000000000000000000000000000000000000000084145f8412161561519857615197614b3d565b5b82820584148315176151ad576151ac614b3d565b5b5092915050565b7f4f6e6c79206f776e65722063616e20736574207363616c6573000000000000005f82015250565b5f6151e860198361497c565b91506151f3826151b4565b602082019050919050565b5f6020820190508181035f830152615215816151dc565b9050919050565b7f7363696420616e64207363616c65206c656e677468206d69736d6174636800005f82015250565b5f615250601e8361497c565b915061525b8261521c565b602082019050919050565b5f6020820190508181035f83015261527d81615244565b9050919050565b61528d81614359565b82525050565b5f6020820190506152a65f830184615284565b92915050565b7f4f6e6c79206f776e65722063616e2073657420696e74657276616c20454d41735f82015250565b5f6152e060208361497c565b91506152eb826152ac565b602082019050919050565b5f6020820190508181035f83015261530d816152d4565b9050919050565b7f7363696420616e6420656d6173206c656e677468206d69736d617463680000005f82015250565b5f615348601d8361497c565b915061535382615314565b602082019050919050565b5f6020820190508181035f8301526153758161533c565b9050919050565b7f4f6e6c79206f776e65722063616e2075706461746520636f656666696369656e5f8201527f7473000000000000000000000000000000000000000000000000000000000000602082015250565b5f6153d660228361497c565b91506153e18261537c565b604082019050919050565b5f6020820190508181035f830152615403816153ca565b9050919050565b61541381614798565b811461541d575f5ffd5b50565b5f8135905061542e8161540a565b92915050565b5f60208284031215615449576154486138c0565b5b5f61545684828501615420565b91505092915050565b5f61546982613922565b915067ffffffffffffffff820361548357615482614b3d565b5b600182019050919050565b5f61549882613922565b91506154a383613922565b9250828201905067ffffffffffffffff8111156154c3576154c2614b3d565b5b92915050565b7f4f6e6c79206f776e65722063616e206d6f6469667920736561736f6e204944005f82015250565b5f6154fd601f8361497c565b9150615508826154c9565b602082019050919050565b5f6020820190508181035f83015261552a816154f1565b9050919050565b7f4f6e6c79206f776e65722063616e206d6f6469667920617574686f72697469655f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61558b60218361497c565b915061559682615531565b604082019050919050565b5f6020820190508181035f8301526155b88161557f565b9050919050565b7f43616e6e6f74207265766f6b65206f776e2061636365737300000000000000005f82015250565b5f6155f360188361497c565b91506155fe826155bf565b602082019050919050565b5f6020820190508181035f830152615620816155e7565b9050919050565b7f4f6e6c79206f776e65722063616e2073657420726577617264207479706500005f82015250565b5f61565b601e8361497c565b915061566682615627565b602082019050919050565b5f6020820190508181035f8301526156888161564f565b9050919050565b6156988161410c565b82525050565b6156a781614136565b82525050565b6156b681614d67565b82525050565b5f610120820190506156d05f83018c61481f565b6156dd602083018b61568f565b6156ea604083018a6148c9565b6156f7606083018961569e565b615704608083018861569e565b61571160a08301876156ad565b61571e60c08301866139a6565b61572b60e08301856139a6565b615739610100830184614414565b9a9950505050505050505050565b7f4f6e6c79206f776e65722063616e2073657420706172616d73000000000000005f82015250565b5f61577b60198361497c565b915061578682615747565b602082019050919050565b5f6020820190508181035f8301526157a88161576f565b9050919050565b6157b8816143b9565b81146157c2575f5ffd5b50565b5f81356157d1816157af565b80915050919050565b5f815f1b9050919050565b5f69ffffffffffffffffffff6157fa846157da565b9350801983169250808416831791505092915050565b5f819050919050565b5f61583361582e615829846143b9565b615810565b6143b9565b9050919050565b5f819050919050565b61584c82615819565b61585f6158588261583a565b83546157e5565b8255505050565b5f8160501b9050919050565b5f73ffffffffffffffffffff0000000000000000000061589184615866565b9350801983169250808416831791505092915050565b6158b082615819565b6158c36158bc8261583a565b8354615872565b8255505050565b5f8160a01b9050919050565b5f7dffffffffffffffffffff00000000000000000000000000000000000000006158ff846158ca565b9350801983169250808416831791505092915050565b61591e82615819565b61593161592a8261583a565b83546158d6565b8255505050565b5f81015f830180615948816157c5565b90506159548184615843565b5050505f81016020830180615968816157c5565b905061597481846158a7565b5050505f81016040830180615988816157c5565b90506159948184615915565b5050505050565b6159a58282615938565b5050565b5f6159b38261399d565b91506159be8361399d565b92508282039050818111156159d6576159d5614b3d565b5b92915050565b5f6159e682613c0c565b91506159f183613c0c565b925082820390508181125f8412168282135f851215161715615a1657615a15614b3d565b5b92915050565b7f55706461746572206164647265737320697320656d70747900000000000000005f82015250565b5f615a5060188361497c565b9150615a5b82615a1c565b602082019050919050565b5f6020820190508181035f830152615a7d81615a44565b905091905056fea26469706673582212209d9097435957bdb616c0127cdb11e2fbbc992276bf7cd4a5df493556812b091864736f6c634300081e0033000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee

Deployed Bytecode

0x6080604052600436106101e2575f3560e01c8063a03cfb2711610101578063c0d5536f11610094578063e45b21fc11610063578063e45b21fc146106ff578063e627f2db1461073b578063ec97942b14610765578063f57c2225146107a1576101e2565b8063c0d5536f14610655578063d1767a4a1461067d578063d3b30b75146106ad578063dbe5cc0a146106d7576101e2565b8063b18b78dd116100d0578063b18b78dd1461059f578063b5f0d35c146105c9578063bb4bb81d146105f1578063bbb5b88514610619576101e2565b8063a03cfb27146104d5578063ab63497d14610511578063abc71aec14610539578063afd4c8d614610575576101e2565b80636aa3241b116101795780637adbf973116101485780637adbf9731461041f5780637b0acfab146104475780638a51f8601461046f57806399e3b18d14610499576101e2565b80636aa3241b146103765780636dc7ea911461039e57806371123e92146103c65780637586a386146103f0576101e2565b80635081505c116101b55780635081505c146102ae5780635acef21b146102d65780635ce844321461031257806364a798961461034e576101e2565b80630e0264de146101e65780631a55a5c51461022257806329c4df001461025e5780632b0a328b14610286575b5f5ffd5b3480156101f1575f5ffd5b5061020c6004803603810190610207919061395f565b6107dd565b60405161021991906139b5565b60405180910390f35b34801561022d575f5ffd5b5061024860048036038101906102439190613a0c565b610849565b60405161025591906139b5565b60405180910390f35b348015610269575f5ffd5b50610284600480360381019061027f9190613aed565b610879565b005b348015610291575f5ffd5b506102ac60048036038101906102a79190613b95565b6109d8565b005b3480156102b9575f5ffd5b506102d460048036038101906102cf9190613d0d565b610b03565b005b3480156102e1575f5ffd5b506102fc60048036038101906102f79190613dd4565b610b37565b6040516103099190613f44565b60405180910390f35b34801561031d575f5ffd5b506103386004803603810190610333919061409c565b610cee565b6040516103459190614266565b60405180910390f35b348015610359575f5ffd5b50610374600480360381019061036f91906142db565b611614565b005b348015610381575f5ffd5b5061039c6004803603810190610397919061438e565b611773565b005b3480156103a9575f5ffd5b506103c460048036038101906103bf91906142db565b611850565b005b3480156103d1575f5ffd5b506103da6119af565b6040516103e791906139b5565b60405180910390f35b3480156103fb575f5ffd5b506104046119b5565b60405161041696959493929190614494565b60405180910390f35b34801561042a575f5ffd5b50610445600480360381019061044091906144f4565b611a84565b005b348015610452575f5ffd5b5061046d6004803603810190610468919061451f565b611b50565b005b34801561047a575f5ffd5b50610483611cf1565b6040516104909190614559565b60405180910390f35b3480156104a4575f5ffd5b506104bf60048036038101906104ba91906144f4565b611d08565b6040516104cc91906139b5565b60405180910390f35b3480156104e0575f5ffd5b506104fb60048036038101906104f691906144f4565b611dc4565b604051610508919061461a565b60405180910390f35b34801561051c575f5ffd5b506105376004803603810190610532919061463a565b611f37565b005b348015610544575f5ffd5b5061055f600480360381019061055a9190614665565b612021565b60405161056c9190614778565b60405180910390f35b348015610580575f5ffd5b50610589612220565b6040516105969190614806565b60405180910390f35b3480156105aa575f5ffd5b506105b3612294565b6040516105c0919061482e565b60405180910390f35b3480156105d4575f5ffd5b506105ef60048036038101906105ea9190614847565b6122bc565b005b3480156105fc575f5ffd5b5061061760048036038101906106129190614885565b612411565b005b348015610624575f5ffd5b5061063f600480360381019061063a9190613a0c565b6124ba565b60405161064c91906148b0565b60405180910390f35b348015610660575f5ffd5b5061067b6004803603810190610676919061438e565b6124ea565b005b6106976004803603810190610692919061409c565b6125c6565b6040516106a49190614266565b60405180910390f35b3480156106b8575f5ffd5b506106c1612c8b565b6040516106ce91906148d8565b60405180910390f35b3480156106e2575f5ffd5b506106fd60048036038101906106f891906148f1565b612ca6565b005b34801561070a575f5ffd5b5061072560048036038101906107209190613a0c565b612da9565b60405161073291906139b5565b60405180910390f35b348015610746575f5ffd5b5061074f612dd9565b60405161075c91906139b5565b60405180910390f35b348015610770575f5ffd5b5061078b60048036038101906107869190613a0c565b612de2565b60405161079891906148b0565b60405180910390f35b3480156107ac575f5ffd5b506107c760048036038101906107c2919061395f565b612e12565b6040516107d491906139b5565b60405180910390f35b5f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154905092915050565b5f60075f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906149fc565b60405180910390fd5b81819050848490501461094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190614a8a565b60405180910390fd5b5f5f90505b848490508110156109d15782828281811061096d5761096c614aa8565b5b9050602002013560015f87878581811061098a57610989614aa8565b5b905060200201602081019061099f9190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555080600101905061094f565b5050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890614b1f565b60405180910390fd5b60405180604001604052808481526020018367ffffffffffffffff1681525060055f8767ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155905050806004819055505050505050565b610b11848989898987612ca6565b610b1a89611a84565b610b2381612411565b610b2c83611b50565b505050505050505050565b60608167ffffffffffffffff811115610b5357610b52613f78565b5b604051908082528060200260200182016040528015610b8c57816020015b610b796136a8565b815260200190600190039081610b715790505b5090505f5f90505b82811015610ce6575f600a5f8387610bac9190614b6a565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c145750610ce6565b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160055f8967ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201548152602001600182015481525050815250838381518110610ccf57610cce614aa8565b5b602002602001018190525050806001019050610b94565b509392505050565b6060600c5f9054906101000a900460ff1615610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690614be7565b60405180910390fd5b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e195131846040518263ffffffff1660e01b8152600401610d9a9190614c65565b5f60405180830381865afa158015610db4573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ddc9190614f26565b9050805167ffffffffffffffff811115610df957610df8613f78565b5b604051908082528060200260200182016040528015610e3257816020015b610e1f6136dd565b815260200190600190039081610e175790505b5091505f815167ffffffffffffffff811115610e5157610e50613f78565b5b604051908082528060200260200182016040528015610e7f5781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff811115610e9e57610e9d613f78565b5b604051908082528060200260200182016040528015610ecc5781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff811115610eeb57610eea613f78565b5b604051908082528060200260200182016040528015610f195781602001602082028036833780820191505090505b5090505f5f90505b845181101561160a575f858281518110610f3e57610f3d614aa8565b5b602002602001015190505f815f01519050600c60029054906101000a900461ffff1661ffff16816040015161ffff1614610f795750506115fd565b5f60075f610f8e845f01518560200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205403610fbe5750506115fd565b5f82604001515f015167ffffffffffffffff1603611075576040518060c00160405280825f015160ff168152602001826020015167ffffffffffffffff16815260200183602001515f015167ffffffffffffffff1681526020018360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525088848151811061106357611062614aa8565b5b602002602001018190525050506115fd565b5f5f8360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168460400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611156110f2578360200151604001518460400151604001516110eb9190614f6d565b9050611111565b83604001516040015184602001516040015161110e9190614f6d565b90505b61117260075f611128865f01518760200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e94565b9150505f670de0b6b3a764000084602001516020015185604001516020015161119b9190614fbe565b65ffffffffffff166111ad9190614ff7565b90505f5f5f6111c58c89885f01518960200151612ebc565b915091505f81156111f2578a83815181106111e3576111e2614aa8565b5b6020026020010151905061122d565b60065f611206895f01518a60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505b811561134d575f6112658b858151811061124a57611249614aa8565b5b60200260200101516103e8886112609190615065565b612f91565b9050808b858151811061127b5761127a614aa8565b5b60200260200101818152505060035f9054906101000a900463ffffffff1663ffffffff166001836112ac9190614b6a565b10156112c257670de0b6b3a76400009450611347565b5f6112cf60165483612ff2565b90505f8e86815181106112e5576112e4614aa8565b5b6020026020010151905061130c6113078384846113029190615095565b613025565b6130c6565b96506113258782848461131f9190615095565b856130f8565b8f878151811061133857611337614aa8565b5b60200260200101818152505050505b5061149d565b5f61139c60085f6113658b5f01518c60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8886113979190615065565b612f91565b9050808b8b815181106113b2576113b1614aa8565b5b60200260200101818152505060035f9054906101000a900463ffffffff1663ffffffff166001836113e39190614b6a565b10156113f957670de0b6b3a7640000945061149b565b5f61140660165483612ff2565b90505f60015f61141d8c5f01518d60200151612e7f565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054905061146061145b8384846114569190615095565b613025565b6130c6565b9650611479878284846114739190615095565b856130f8565b8f8d8151811061148c5761148b614aa8565b5b60200260200101818152505050505b505b81156114d4576001816114b09190614b6a565b8b84815181106114c3576114c2614aa8565b5b602002602001018181525050611501565b6001816114e19190614b6a565b8b8a815181106114f4576114f3614aa8565b5b6020026020010181815250505b5050505f5f61151d6103e88561151791906150d6565b8661316b565b915091506040518060c00160405280875f015160ff168152602001876020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001670de0b6b3a764000084866115a6919061513e565b6115b091906150d6565b8152602001670de0b6b3a764000083866115ca919061513e565b6115d491906150d6565b8152508d89815181106115ea576115e9614aa8565b5b6020026020010181905250505050505050505b8080600101915050610f21565b5050505050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906151fe565b60405180910390fd5b8181905084849050146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90615266565b60405180910390fd5b5f5f90505b8484905081101561176c5782828281811061170857611707614aa8565b5b9050602002013560075f87878581811061172557611724614aa8565b5b905060200201602081019061173a9190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508060010190506116ea565b5050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614b1f565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f9bec7d73cd5cab20df3be726efbc75e327e8215bdeea29bec8e4ee6522edb292816040516118459190615293565b60405180910390a150565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d0906152f6565b60405180910390fd5b818190508484905014611921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119189061535e565b60405180910390fd5b5f5f90505b848490508110156119a85782828281811061194457611943614aa8565b5b9050602002013560085f87878581811061196157611960614aa8565b5b90506020020160208101906119769190613a0c565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550806001019050611926565b5050505050565b600b5481565b6119bd613744565b5f5f5f5f6119c961376b565b601160145460155460165460035f9054906101000a900463ffffffff166040518060800160405280600d548152602001600e548152602001600f548152602001601054815250856040518060600160405290815f82015f9054906101000a900460090b60090b60090b81526020015f8201600a9054906101000a900460090b60090b60090b81526020015f820160149054906101000a900460090b60090b60090b815250509550955095509550955095509550909192939495565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0490614b1f565b60405180910390fd5b8060175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906153ec565b60405180910390fd5b805f016020810190611beb9190615434565b60125f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806020016020810190611c309190615434565b6012600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806040016020810190611c769190615434565b60135f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff160217905550806060016020810190611cbb9190615434565b6013600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555050565b5f600c60029054906101000a900461ffff16905090565b5f5f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611611dbe5760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015482611dab9190614b6a565b915080611db79061545f565b9050611d0e565b50919050565b606060015f5f9054906101000a900467ffffffffffffffff16611de7919061548e565b67ffffffffffffffff1667ffffffffffffffff811115611e0a57611e09613f78565b5b604051908082528060200260200182016040528015611e4357816020015b611e3061378f565b815260200190600190039081611e285790505b5090505f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611611f315760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201548152602001600182015481525050828267ffffffffffffffff1681518110611f1557611f14614aa8565b5b602002602001018190525080611f2a9061545f565b9050611e4b565b50919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790615513565b60405180910390fd5b805f5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f81ede9152c923222ead1a978d837e30f8c546655309d2bf3ec3ee115cf6f5fda8160405161201691906148d8565b60405180910390a150565b60608167ffffffffffffffff81111561203d5761203c613f78565b5b60405190808252806020026020018201604052801561207657816020015b6120636137a7565b81526020019060019003908161205b5790505b5090505f5f90505b82811015612219575f600a5f83876120969190614b6a565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120fe5750612219565b5f60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090505f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16116121ec5760055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154826020018181516121d49190614b6a565b91508181525050806121e59061545f565b9050612131565b508084848151811061220157612200614aa8565b5b6020026020010181905250505080600101905061207e565b5092915050565b6122286137d5565b604051806080016040528060125f9054906101000a9004600b0b600b0b81526020016012600c9054906101000a9004600b0b600b0b815260200160135f9054906101000a9004600b0b600b0b81526020016013600c9054906101000a9004600b0b600b0b815250905090565b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c906155a1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b957806123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90615609565b60405180910390fd5b5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190615671565b60405180910390fd5b80600c60026101000a81548161ffff021916908361ffff16021790555050565b5f60015f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614b1f565b60405180910390fd5b80600c5f6101000a81548160ff0219169083151502179055507f21c6565ddd14783c7c998f821309e096af992922c439470a4863ee76c1fdc22c816040516125bb9190615293565b60405180910390a150565b6060600c5f9054906101000a900460ff1615612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614be7565b60405180910390fd5b6126203361318a565b5f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663927b21ac34856040518363ffffffff1660e01b815260040161267c9190614c65565b5f6040518083038185885af1158015612697573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f820116820180604052508101906126c09190614f26565b9050805167ffffffffffffffff8111156126dd576126dc613f78565b5b60405190808252806020026020018201604052801561271657816020015b6127036136dd565b8152602001906001900390816126fb5790505b509150612721613805565b5f5f5f90505f5f90505b8451811015612c695784818151811061274757612746614aa8565b5b60200260200101519350600c60029054906101000a900461ffff1661ffff16845f01516040015161ffff1603612c5c575f61278f855f01515f0151865f015160200151612e7f565b90505f5f60075f8468ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f81036127cc57505050612c5c565b5f87604001515f015167ffffffffffffffff160361288a576040518060c00160405280885f01515f015160ff168152602001885f01516020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525089858151811061287757612876614aa8565b5b6020026020010181905250505050612c5c565b8660200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168760400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115612905578660200151604001518760400151604001516128fe9190614f6d565b9550612924565b8660400151604001518760200151604001516129219190614f6d565b95505b61294e81877dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e94565b9150505f670de0b6b3a76400008760200151602001518860400151602001516129779190614fbe565b65ffffffffffff166129899190614ff7565b90505f5f6129a46103e88461299e91906150d6565b8561316b565b915091505f6129e88660065f8968ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8876129e39190615065565b61331b565b9050600160065f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054612a1e9190614b6a565b60065f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055505f670de0b6b3a76400008483612a5f919061513e565b612a6991906150d6565b90505f670de0b6b3a76400008484612a81919061513e565b612a8b91906150d6565b9050600c60019054906101000a900460ff1615612b4457612ab68183612ab19190614b6a565b6133d8565b7faa47a68f67393b40c7938796558ec35f7f3a9e558583fb98c6e383428239c218338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c612b069190615065565b88888b604051612b1e999897969594939291906156bc565b60405180910390a18082612b329190614b6a565b8a612b3d9190614b6a565b9950612bb5565b7f59d727fbfc47d17e8340552ec9defc64a6eb6bdd1eaccacc533d66c5c528160e338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c612b949190615065565b88888b604051612bac999897969594939291906156bc565b60405180910390a15b6040518060c001604052808d5f01515f015160ff1681526020018d5f01516020015167ffffffffffffffff1681526020018d604001515f015167ffffffffffffffff1681526020018d60400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152508e8a81518110612c4857612c47614aa8565b5b602002602001018190525050505050505050505b808060010191505061272b565b508060045f828254612c7b9190614b6a565b9250508190555050505050919050565b5f5f5f9054906101000a900467ffffffffffffffff16905090565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615791565b60405180910390fd5b8560118181612d3e919061599b565b9050508460148190555083601581905550826016819055508060035f6101000a81548163ffffffff021916908363ffffffff160217905550815f0135600d819055508160200135600e819055508160400135600f819055508160600135601081905550505050505050565b5f60085f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f600454905090565b5f60025f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154905092915050565b5f8290508060401b9050818101905092915050565b5f82670de0b6b3a764000083612eaa9190614ff7565b612eb49190615065565b905092915050565b5f5f5f5f90505b8651811015612f80575f8560ff1614158015612ee957505f8467ffffffffffffffff1614155b8015612f1a57508460ff16878281518110612f0757612f06614aa8565b5b60200260200101515f01515f015160ff16145b8015612f5a57508367ffffffffffffffff16878281518110612f3f57612f3e614aa8565b5b60200260200101515f01516020015167ffffffffffffffff16145b15612f755785811115612f74578060019250925050612f88565b5b806001019050612ec3565b505f5f915091505b94509492505050565b5f670de0b6b3a764000083670b5ac4075a691740612faf9190614ff7565b83670b5ac4075a691740670de0b6b3a7640000612fcc91906159a9565b612fd69190614ff7565b612fe09190614b6a565b612fea9190615065565b905092915050565b5f82670de0b6b3a7640000838561300991906159dc565b613013919061513e565b61301d91906150d6565b905092915050565b5f5f670de0b6b3a764000060115f015f9054906101000a900460090b60090b8561304f919061513e565b61305991906150d6565b90505f670de0b6b3a764000060115f01600a9054906101000a900460090b60090b85613085919061513e565b61308f91906150d6565b9050808260115f0160149054906101000a900460090b60090b6130b29190615095565b6130bc9190615095565b9250505092915050565b5f6015548212156130db5760155490506130f3565b6014548213156130ef5760145490506130f3565b8190505b919050565b5f6015548514801561310957505f82135b801561311457505f84135b1561312c57818361312591906159dc565b9050613163565b6014548514801561313c57505f82125b801561314757505f84125b1561315f57818361315891906159dc565b9050613163565b8290505b949350505050565b5f5f61317684613487565b61317f84613521565b915091509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ef90615a66565b60405180910390fd5b5f5f90505b5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff16116132b0575f60055f8367ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154111561329d5750613318565b80806132a89061545f565b9150506131fd565b5080600a5f600b5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b546133119190614b6a565b600b819055505b50565b5f5f61334e60085f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205484612f91565b90508060085f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555060035f9054906101000a900463ffffffff1663ffffffff166001856133a19190614b6a565b10156133b857670de0b6b3a76400009150506133d1565b6133cd856133c860165484612ff2565b6135bd565b9150505b9392505050565b5f60055f5f5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905081815f015f8282546134619190614b6a565b925050819055506001816001015f82825461347c9190614b6a565b925050819055505050565b5f61351a6135126ec097ce7bc90715b34b9f1000000000848560135f9054906101000a9004600b0b600b0b6134bc919061513e565b6134c6919061513e565b6134d091906150d6565b670de0b6b3a76400008560125f9054906101000a9004600b0b600b0b6134f6919061513e565b61350091906150d6565b61350a9190615095565b600e54613677565b600d5461368f565b9050919050565b5f6135b66135ae6ec097ce7bc90715b34b9f100000000084856013600c9054906101000a9004600b0b600b0b613557919061513e565b613561919061513e565b61356b91906150d6565b670de0b6b3a7640000856012600c9054906101000a9004600b0b600b0b613592919061513e565b61359c91906150d6565b6135a69190615095565b601054613677565b600f5461368f565b9050919050565b5f5f60015f8568ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f83826135f69190615095565b905061360a6136058583613025565b6130c6565b9250613618838383876130f8565b60015f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508260025f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550505092915050565b5f8183126136855781613687565b825b905092915050565b5f8183121561369e57816136a0565b825b905092915050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016136d761378f565b81525090565b6040518060c001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180606001604052805f60090b81526020015f60090b81526020015f60090b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180608001604052805f600b0b81526020015f600b0b81526020015f600b0b81526020015f600b0b81525090565b6040518060600160405280613818613838565b8152602001613825613867565b8152602001613832613867565b81525090565b60405180606001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f61ffff1681525090565b60405180606001604052805f67ffffffffffffffff1681526020015f65ffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138f1826138c8565b9050919050565b613901816138e7565b811461390b575f5ffd5b50565b5f8135905061391c816138f8565b92915050565b5f67ffffffffffffffff82169050919050565b61393e81613922565b8114613948575f5ffd5b50565b5f8135905061395981613935565b92915050565b5f5f60408385031215613975576139746138c0565b5b5f6139828582860161390e565b92505060206139938582860161394b565b9150509250929050565b5f819050919050565b6139af8161399d565b82525050565b5f6020820190506139c85f8301846139a6565b92915050565b5f68ffffffffffffffffff82169050919050565b6139eb816139ce565b81146139f5575f5ffd5b50565b5f81359050613a06816139e2565b92915050565b5f60208284031215613a2157613a206138c0565b5b5f613a2e848285016139f8565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613a5857613a57613a37565b5b8235905067ffffffffffffffff811115613a7557613a74613a3b565b5b602083019150836020820283011115613a9157613a90613a3f565b5b9250929050565b5f5f83601f840112613aad57613aac613a37565b5b8235905067ffffffffffffffff811115613aca57613ac9613a3b565b5b602083019150836020820283011115613ae657613ae5613a3f565b5b9250929050565b5f5f5f5f60408587031215613b0557613b046138c0565b5b5f85013567ffffffffffffffff811115613b2257613b216138c4565b5b613b2e87828801613a43565b9450945050602085013567ffffffffffffffff811115613b5157613b506138c4565b5b613b5d87828801613a98565b925092505092959194509250565b613b748161399d565b8114613b7e575f5ffd5b50565b5f81359050613b8f81613b6b565b92915050565b5f5f5f5f5f60a08688031215613bae57613bad6138c0565b5b5f613bbb8882890161394b565b9550506020613bcc8882890161390e565b9450506040613bdd88828901613b81565b9350506060613bee8882890161394b565b9250506080613bff88828901613b81565b9150509295509295909350565b5f819050919050565b613c1e81613c0c565b8114613c28575f5ffd5b50565b5f81359050613c3981613c15565b92915050565b5f5ffd5b5f60808284031215613c5857613c57613c3f565b5b81905092915050565b5f60608284031215613c7657613c75613c3f565b5b81905092915050565b5f60808284031215613c9457613c93613c3f565b5b81905092915050565b5f63ffffffff82169050919050565b613cb581613c9d565b8114613cbf575f5ffd5b50565b5f81359050613cd081613cac565b92915050565b5f61ffff82169050919050565b613cec81613cd6565b8114613cf6575f5ffd5b50565b5f81359050613d0781613ce3565b92915050565b5f5f5f5f5f5f5f5f5f6102208a8c031215613d2b57613d2a6138c0565b5b5f613d388c828d0161390e565b9950506020613d498c828d01613c2b565b9850506040613d5a8c828d01613c2b565b9750506060613d6b8c828d01613b81565b9650506080613d7c8c828d01613c43565b955050610100613d8e8c828d01613c61565b945050610160613da08c828d01613c7f565b9350506101e0613db28c828d01613cc2565b925050610200613dc48c828d01613cf9565b9150509295985092959850929598565b5f5f5f60608486031215613deb57613dea6138c0565b5b5f613df88682870161394b565b9350506020613e0986828701613b81565b9250506040613e1a86828701613b81565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e56816138e7565b82525050565b613e658161399d565b82525050565b604082015f820151613e7f5f850182613e5c565b506020820151613e926020850182613e5c565b50505050565b606082015f820151613eac5f850182613e4d565b506020820151613ebf6020850182613e6b565b50505050565b5f613ed08383613e98565b60608301905092915050565b5f602082019050919050565b5f613ef282613e24565b613efc8185613e2e565b9350613f0783613e3e565b805f5b83811015613f37578151613f1e8882613ec5565b9750613f2983613edc565b925050600181019050613f0a565b5085935050505092915050565b5f6020820190508181035f830152613f5c8184613ee8565b905092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613fae82613f68565b810181811067ffffffffffffffff82111715613fcd57613fcc613f78565b5b80604052505050565b5f613fdf6138b7565b9050613feb8282613fa5565b919050565b5f67ffffffffffffffff82111561400a57614009613f78565b5b61401382613f68565b9050602081019050919050565b828183375f83830152505050565b5f61404061403b84613ff0565b613fd6565b90508281526020810184848401111561405c5761405b613f64565b5b614067848285614020565b509392505050565b5f82601f83011261408357614082613a37565b5b813561409384826020860161402e565b91505092915050565b5f602082840312156140b1576140b06138c0565b5b5f82013567ffffffffffffffff8111156140ce576140cd6138c4565b5b6140da8482850161406f565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60ff82169050919050565b6141218161410c565b82525050565b61413081613922565b82525050565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61416881614136565b82525050565b60c082015f8201516141825f850182614118565b5060208201516141956020850182614127565b5060408201516141a86040850182614127565b5060608201516141bb606085018261415f565b5060808201516141ce6080850182613e5c565b5060a08201516141e160a0850182613e5c565b50505050565b5f6141f2838361416e565b60c08301905092915050565b5f602082019050919050565b5f614214826140e3565b61421e81856140ed565b9350614229836140fd565b805f5b8381101561425957815161424088826141e7565b975061424b836141fe565b92505060018101905061422c565b5085935050505092915050565b5f6020820190508181035f83015261427e818461420a565b905092915050565b5f5f83601f84011261429b5761429a613a37565b5b8235905067ffffffffffffffff8111156142b8576142b7613a3b565b5b6020830191508360208202830111156142d4576142d3613a3f565b5b9250929050565b5f5f5f5f604085870312156142f3576142f26138c0565b5b5f85013567ffffffffffffffff8111156143105761430f6138c4565b5b61431c87828801613a43565b9450945050602085013567ffffffffffffffff81111561433f5761433e6138c4565b5b61434b87828801614286565b925092505092959194509250565b5f8115159050919050565b61436d81614359565b8114614377575f5ffd5b50565b5f8135905061438881614364565b92915050565b5f602082840312156143a3576143a26138c0565b5b5f6143b08482850161437a565b91505092915050565b5f8160090b9050919050565b6143ce816143b9565b82525050565b606082015f8201516143e85f8501826143c5565b5060208201516143fb60208501826143c5565b50604082015161440e60408501826143c5565b50505050565b61441d81613c0c565b82525050565b61442c81613c9d565b82525050565b61443b81613c0c565b82525050565b608082015f8201516144555f850182614432565b5060208201516144686020850182614432565b50604082015161447b6040850182614432565b50606082015161448e6060850182614432565b50505050565b5f610160820190506144a85f8301896143d4565b6144b56060830188614414565b6144c26080830187614414565b6144cf60a08301866139a6565b6144dc60c0830185614423565b6144e960e0830184614441565b979650505050505050565b5f60208284031215614509576145086138c0565b5b5f6145168482850161390e565b91505092915050565b5f60808284031215614534576145336138c0565b5b5f61454184828501613c7f565b91505092915050565b61455381613cd6565b82525050565b5f60208201905061456c5f83018461454a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6145a68383613e6b565b60408301905092915050565b5f602082019050919050565b5f6145c882614572565b6145d2818561457c565b93506145dd8361458c565b805f5b8381101561460d5781516145f4888261459b565b97506145ff836145b2565b9250506001810190506145e0565b5085935050505092915050565b5f6020820190508181035f83015261463281846145be565b905092915050565b5f6020828403121561464f5761464e6138c0565b5b5f61465c8482850161394b565b91505092915050565b5f5f6040838503121561467b5761467a6138c0565b5b5f61468885828601613b81565b925050602061469985828601613b81565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b604082015f8201516146e05f850182613e4d565b5060208201516146f36020850182613e5c565b50505050565b5f61470483836146cc565b60408301905092915050565b5f602082019050919050565b5f614726826146a3565b61473081856146ad565b935061473b836146bd565b805f5b8381101561476b57815161475288826146f9565b975061475d83614710565b92505060018101905061473e565b5085935050505092915050565b5f6020820190508181035f830152614790818461471c565b905092915050565b5f81600b0b9050919050565b6147ad81614798565b82525050565b608082015f8201516147c75f8501826147a4565b5060208201516147da60208501826147a4565b5060408201516147ed60408501826147a4565b50606082015161480060608501826147a4565b50505050565b5f6080820190506148195f8301846147b3565b92915050565b614828816138e7565b82525050565b5f6020820190506148415f83018461481f565b92915050565b5f5f6040838503121561485d5761485c6138c0565b5b5f61486a8582860161390e565b925050602061487b8582860161437a565b9150509250929050565b5f6020828403121561489a576148996138c0565b5b5f6148a784828501613cf9565b91505092915050565b5f6020820190506148c35f830184614414565b92915050565b6148d281613922565b82525050565b5f6020820190506148eb5f8301846148c9565b92915050565b5f5f5f5f5f5f610160878903121561490c5761490b6138c0565b5b5f61491989828a01613c61565b965050606061492a89828a01613c2b565b955050608061493b89828a01613c2b565b94505060a061494c89828a01613b81565b93505060c061495d89828a01613c43565b92505061014061496f89828a01613cc2565b9150509295509295509295565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e20736574206572726f7220696e74656772615f8201527f6c73000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149e660228361497c565b91506149f18261498c565b604082019050919050565b5f6020820190508181035f830152614a13816149da565b9050919050565b7f7363696420616e6420696e74656772616c73206c656e677468206d69736d61745f8201527f6368000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a7460228361497c565b9150614a7f82614a1a565b604082019050919050565b5f6020820190508181035f830152614aa181614a68565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206f776e65722063616e206d6f646966792076616c756573000000005f82015250565b5f614b09601c8361497c565b9150614b1482614ad5565b602082019050919050565b5f6020820190508181035f830152614b3681614afd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614b748261399d565b9150614b7f8361399d565b9250828201905080821115614b9757614b96614b3d565b5b92915050565b7f5265776172647320636f6e74726163742069732066726f7a656e0000000000005f82015250565b5f614bd1601a8361497c565b9150614bdc82614b9d565b602082019050919050565b5f6020820190508181035f830152614bfe81614bc5565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f614c3782614c05565b614c418185614c0f565b9350614c51818560208601614c1f565b614c5a81613f68565b840191505092915050565b5f6020820190508181035f830152614c7d8184614c2d565b905092915050565b5f67ffffffffffffffff821115614c9f57614c9e613f78565b5b602082029050602081019050919050565b5f5ffd5b614cbd8161410c565b8114614cc7575f5ffd5b50565b5f81519050614cd881614cb4565b92915050565b5f81519050614cec81613935565b92915050565b5f81519050614d0081613ce3565b92915050565b5f60608284031215614d1b57614d1a614cb0565b5b614d256060613fd6565b90505f614d3484828501614cca565b5f830152506020614d4784828501614cde565b6020830152506040614d5b84828501614cf2565b60408301525092915050565b5f65ffffffffffff82169050919050565b614d8181614d67565b8114614d8b575f5ffd5b50565b5f81519050614d9c81614d78565b92915050565b614dab81614136565b8114614db5575f5ffd5b50565b5f81519050614dc681614da2565b92915050565b5f60608284031215614de157614de0614cb0565b5b614deb6060613fd6565b90505f614dfa84828501614cde565b5f830152506020614e0d84828501614d8e565b6020830152506040614e2184828501614db8565b60408301525092915050565b5f6101208284031215614e4357614e42614cb0565b5b614e4d6060613fd6565b90505f614e5c84828501614d06565b5f830152506060614e6f84828501614dcc565b60208301525060c0614e8384828501614dcc565b60408301525092915050565b5f614ea1614e9c84614c85565b613fd6565b9050808382526020820190506101208402830185811115614ec557614ec4613a3f565b5b835b81811015614eef5780614eda8882614e2d565b84526020840193505061012081019050614ec7565b5050509392505050565b5f82601f830112614f0d57614f0c613a37565b5b8151614f1d848260208601614e8f565b91505092915050565b5f60208284031215614f3b57614f3a6138c0565b5b5f82015167ffffffffffffffff811115614f5857614f576138c4565b5b614f6484828501614ef9565b91505092915050565b5f614f7782614136565b9150614f8283614136565b925082820390507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115614fb857614fb7614b3d565b5b92915050565b5f614fc882614d67565b9150614fd383614d67565b9250828203905065ffffffffffff811115614ff157614ff0614b3d565b5b92915050565b5f6150018261399d565b915061500c8361399d565b925082820261501a8161399d565b9150828204841483151761503157615030614b3d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506f8261399d565b915061507a8361399d565b92508261508a57615089615038565b5b828204905092915050565b5f61509f82613c0c565b91506150aa83613c0c565b92508282019050828112155f8312168382125f8412151617156150d0576150cf614b3d565b5b92915050565b5f6150e082613c0c565b91506150eb83613c0c565b9250826150fb576150fa615038565b5b60015f0383147f80000000000000000000000000000000000000000000000000000000000000008314161561513357615132614b3d565b5b828205905092915050565b5f61514882613c0c565b915061515383613c0c565b925082820261516181613c0c565b91507f800000000000000000000000000000000000000000000000000000000000000084145f8412161561519857615197614b3d565b5b82820584148315176151ad576151ac614b3d565b5b5092915050565b7f4f6e6c79206f776e65722063616e20736574207363616c6573000000000000005f82015250565b5f6151e860198361497c565b91506151f3826151b4565b602082019050919050565b5f6020820190508181035f830152615215816151dc565b9050919050565b7f7363696420616e64207363616c65206c656e677468206d69736d6174636800005f82015250565b5f615250601e8361497c565b915061525b8261521c565b602082019050919050565b5f6020820190508181035f83015261527d81615244565b9050919050565b61528d81614359565b82525050565b5f6020820190506152a65f830184615284565b92915050565b7f4f6e6c79206f776e65722063616e2073657420696e74657276616c20454d41735f82015250565b5f6152e060208361497c565b91506152eb826152ac565b602082019050919050565b5f6020820190508181035f83015261530d816152d4565b9050919050565b7f7363696420616e6420656d6173206c656e677468206d69736d617463680000005f82015250565b5f615348601d8361497c565b915061535382615314565b602082019050919050565b5f6020820190508181035f8301526153758161533c565b9050919050565b7f4f6e6c79206f776e65722063616e2075706461746520636f656666696369656e5f8201527f7473000000000000000000000000000000000000000000000000000000000000602082015250565b5f6153d660228361497c565b91506153e18261537c565b604082019050919050565b5f6020820190508181035f830152615403816153ca565b9050919050565b61541381614798565b811461541d575f5ffd5b50565b5f8135905061542e8161540a565b92915050565b5f60208284031215615449576154486138c0565b5b5f61545684828501615420565b91505092915050565b5f61546982613922565b915067ffffffffffffffff820361548357615482614b3d565b5b600182019050919050565b5f61549882613922565b91506154a383613922565b9250828201905067ffffffffffffffff8111156154c3576154c2614b3d565b5b92915050565b7f4f6e6c79206f776e65722063616e206d6f6469667920736561736f6e204944005f82015250565b5f6154fd601f8361497c565b9150615508826154c9565b602082019050919050565b5f6020820190508181035f83015261552a816154f1565b9050919050565b7f4f6e6c79206f776e65722063616e206d6f6469667920617574686f72697469655f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61558b60218361497c565b915061559682615531565b604082019050919050565b5f6020820190508181035f8301526155b88161557f565b9050919050565b7f43616e6e6f74207265766f6b65206f776e2061636365737300000000000000005f82015250565b5f6155f360188361497c565b91506155fe826155bf565b602082019050919050565b5f6020820190508181035f830152615620816155e7565b9050919050565b7f4f6e6c79206f776e65722063616e2073657420726577617264207479706500005f82015250565b5f61565b601e8361497c565b915061566682615627565b602082019050919050565b5f6020820190508181035f8301526156888161564f565b9050919050565b6156988161410c565b82525050565b6156a781614136565b82525050565b6156b681614d67565b82525050565b5f610120820190506156d05f83018c61481f565b6156dd602083018b61568f565b6156ea604083018a6148c9565b6156f7606083018961569e565b615704608083018861569e565b61571160a08301876156ad565b61571e60c08301866139a6565b61572b60e08301856139a6565b615739610100830184614414565b9a9950505050505050505050565b7f4f6e6c79206f776e65722063616e2073657420706172616d73000000000000005f82015250565b5f61577b60198361497c565b915061578682615747565b602082019050919050565b5f6020820190508181035f8301526157a88161576f565b9050919050565b6157b8816143b9565b81146157c2575f5ffd5b50565b5f81356157d1816157af565b80915050919050565b5f815f1b9050919050565b5f69ffffffffffffffffffff6157fa846157da565b9350801983169250808416831791505092915050565b5f819050919050565b5f61583361582e615829846143b9565b615810565b6143b9565b9050919050565b5f819050919050565b61584c82615819565b61585f6158588261583a565b83546157e5565b8255505050565b5f8160501b9050919050565b5f73ffffffffffffffffffff0000000000000000000061589184615866565b9350801983169250808416831791505092915050565b6158b082615819565b6158c36158bc8261583a565b8354615872565b8255505050565b5f8160a01b9050919050565b5f7dffffffffffffffffffff00000000000000000000000000000000000000006158ff846158ca565b9350801983169250808416831791505092915050565b61591e82615819565b61593161592a8261583a565b83546158d6565b8255505050565b5f81015f830180615948816157c5565b90506159548184615843565b5050505f81016020830180615968816157c5565b905061597481846158a7565b5050505f81016040830180615988816157c5565b90506159948184615915565b5050505050565b6159a58282615938565b5050565b5f6159b38261399d565b91506159be8361399d565b92508282039050818111156159d6576159d5614b3d565b5b92915050565b5f6159e682613c0c565b91506159f183613c0c565b925082820390508181125f8412168282135f851215161715615a1657615a15614b3d565b5b92915050565b7f55706461746572206164647265737320697320656d70747900000000000000005f82015250565b5f615a5060188361497c565b9150615a5b82615a1c565b602082019050919050565b5f6020820190508181035f830152615a7d81615a44565b905091905056fea26469706673582212209d9097435957bdb616c0127cdb11e2fbbc992276bf7cd4a5df493556812b091864736f6c634300081e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee

-----Decoded View---------------
Arg [0] : o (address): 0xc0F0b1Bf5F0e2c18A6a2ea86402d69195600faEE

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee


Deployed Bytecode Sourcemap

579:25003:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7288:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7853:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5229:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10296:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9574:637;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25063:516;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15026:4631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4588:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4225:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5877:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3190:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7961:465;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3890:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9284:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7597:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7062:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6780:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4942:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24364:691;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7695:150;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8436:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6396:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4420:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5636:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4047:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11275:3554;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5130:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8543:733;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6272:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6677:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5758:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7444:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7288:148;7373:7;7400;:15;7408:6;7400:15;;;;;;;;;;;;;;;:21;7416:4;7400:21;;;;;;;;;;;;;;;:28;;;7393:35;;7288:148;;;;:::o;7853:100::-;7906:7;7933:6;:12;7940:4;7933:12;;;;;;;;;;;;;;;;7926:19;;7853:100;;;:::o;5229:399::-;5343:11;:23;5355:10;5343:23;;;;;;;;;;;;;;;;;;;;;;;;;5335:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5439:14;;:21;;5424:4;;:11;;:36;5416:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5515:9;5527:1;5515:13;;5510:111;5534:4;;:11;;5530:1;:15;5510:111;;;5592:14;;5607:1;5592:17;;;;;;;:::i;:::-;;;;;;;;5567:13;:22;5581:4;;5586:1;5581:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5567:22;;;;;;;;;;;;;;;:42;;;;5547:3;;;;;5510:111;;;;5229:399;;;;:::o;10296:328::-;10418:11;:23;10430:10;10418:23;;;;;;;;;;;;;;;;;;;;;;;;;10410:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10507:81;;;;;;;;10543:6;10507:81;;;;10571:5;10507:81;;;;;10485:7;:15;10493:6;10485:15;;;;;;;;;;;;;;;:19;10501:2;10485:19;;;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;10614:2;10599:12;:17;;;;10296:328;;;;;:::o;9574:637::-;9928:178;9952:2;9969:17;10001;10033:16;10064:2;10081:14;9928:9;:178::i;:::-;10117:18;10127:7;10117:9;:18::i;:::-;10146:26;10160:11;10146:13;:26::i;:::-;10183:20;10196:6;10183:12;:20::i;:::-;9574:637;;;;;;;;;:::o;25063:516::-;25161:39;25253:5;25229:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25214:45;;25275:9;25287:1;25275:13;;25270:270;25294:5;25290:1;:9;25270:270;;;25322:15;25340:8;:19;25357:1;25349:5;:9;;;;:::i;:::-;25340:19;;;;;;;;;;;;;;;;;;;;;25322:37;;25397:1;25378:21;;:7;:21;;;25374:67;;25420:5;;;25374:67;25476:52;;;;;;;;25494:7;25476:52;;;;;;25503:7;:15;25511:6;25503:15;;;;;;;;;;;;;;;:24;25519:7;25503:24;;;;;;;;;;;;;;;25476:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;25458:12;25471:1;25458:15;;;;;;;;:::i;:::-;;;;;;;:70;;;;25306:234;25301:3;;;;;25270:270;;;;25063:516;;;;;:::o;15026:4631::-;15088:39;15149:6;;;;;;;;;;;15148:7;15140:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15197:31;15231:6;;;;;;;;;;;:30;;;15262:3;15231:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15197:69;;15317:8;:15;15296:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15278:55;;15346:37;15399:8;:15;15386:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15346:69;;15426:29;15472:8;:15;15458:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15426:62;;15499:36;15552:8;:15;15538:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15499:69;;15586:11;15600:1;15586:15;;15581:4034;15609:8;:15;15603:3;:21;15581:4034;;;15648:24;15675:8;15684:3;15675:13;;;;;;;;:::i;:::-;;;;;;;;15648:40;;15703:26;15732:3;:10;;;15703:39;;15778:10;;;;;;;;;;;15761:27;;:9;:13;;;:27;;;15757:76;;15809:8;;;;15757:76;15912:1;15853:6;:55;15860:47;15873:9;:18;;;15893:9;:13;;;15860:12;:47::i;:::-;15853:55;;;;;;;;;;;;;;;;:60;15849:109;;15934:8;;;;15849:109;16003:1;15978:3;:14;;;:21;;;:26;;;15974:212;;16048:95;;;;;;;;16063:9;:18;;;16048:95;;;;;;16082:9;:13;;;16048:95;;;;;;16096:3;:14;;;:21;;;16048:95;;;;;;16118:3;:14;;;:20;;;16048:95;;;;;;16139:1;16048:95;;;;16141:1;16048:95;;;16025:15;16041:3;16025:20;;;;;;;;:::i;:::-;;;;;;;:118;;;;16162:8;;;;15974:212;16202:17;16257:21;16328:3;:14;;;:20;;;16305:43;;:3;:14;;;:20;;;:43;;;16301:276;;;16417:3;:14;;;:20;;;16394:3;:14;;;:20;;;:43;;;;:::i;:::-;16378:59;;16301:276;;;16533:3;:14;;;:20;;;16510:3;:14;;;:20;;;:43;;;;:::i;:::-;16494:59;;16301:276;16611:94;16625:6;:55;16632:47;16645:9;:18;;;16665:9;:13;;;16632:12;:47::i;:::-;16625:55;;;;;;;;;;;;;;;;16690:13;16682:22;;16611:13;:94::i;:::-;16599:106;;16234:487;16735:18;2459:6;16791:3;:14;;;:24;;;16764:3;:14;;;:24;;;:51;;;;:::i;:::-;16756:60;;:88;;;;:::i;:::-;16735:109;;16859:18;16912:12;16926:6;16936:65;16950:8;16961:3;16967:9;:18;;;16987:9;:13;;;16936;:65::i;:::-;16911:90;;;;17020:14;17057:1;17053:199;;;17092:12;17105:4;17092:18;;;;;;;;:::i;:::-;;;;;;;;17083:27;;17053:199;;;17169:13;:62;17183:47;17196:9;:18;;;17216:9;:13;;;17183:12;:47::i;:::-;17169:62;;;;;;;;;;;;;;;;17160:71;;17053:199;17276:1;17272:1656;;;17298:21;17323:58;17338:19;17358:4;17338:25;;;;;;;;:::i;:::-;;;;;;;;17376:4;17365:10;:15;;;;:::i;:::-;17323:14;:58::i;:::-;17298:83;;17428:13;17400:19;17420:4;17400:25;;;;;;;;:::i;:::-;;;;;;;:41;;;;;17495:13;;;;;;;;;;;17482:26;;17491:1;17482:6;:10;;;;:::i;:::-;:26;17478:570;;;2344:6;17537:37;;17478:570;;;17631:12;17646:58;17663:15;;17688:13;17646:9;:58::i;:::-;17631:73;;17731:22;17757:21;17779:4;17757:27;;;;;;;;:::i;:::-;;;;;;;;17731:53;;17825:61;17839:46;17854:5;17879;17861:15;:23;;;;:::i;:::-;17839:14;:46::i;:::-;17825:13;:61::i;:::-;17811:75;;17943:80;17962:11;17975:15;18010:5;17992:15;:23;;;;:::i;:::-;18017:5;17943:18;:80::i;:::-;17913:21;17935:4;17913:27;;;;;;;;:::i;:::-;;;;;;;:110;;;;;17604:444;;17478:570;17279:788;17272:1656;;;18096:21;18121:94;18136:12;:61;18149:47;18162:9;:18;;;18182:9;:13;;;18149:12;:47::i;:::-;18136:61;;;;;;;;;;;;;;;;18210:4;18199:10;:15;;;;:::i;:::-;18121:14;:94::i;:::-;18096:119;;18265:13;18238:19;18258:3;18238:24;;;;;;;;:::i;:::-;;;;;;;:40;;;;;18320:13;;;;;;;;;;;18307:26;;18316:1;18307:6;:10;;;;:::i;:::-;:26;18303:606;;;2344:6;18362:37;;18303:606;;;18456:12;18471:58;18488:15;;18513:13;18471:9;:58::i;:::-;18456:73;;18556:22;18583:13;:62;18597:47;18610:9;:18;;;18630:9;:13;;;18597:12;:47::i;:::-;18583:62;;;;;;;;;;;;;;;;18556:89;;18687:61;18701:46;18716:5;18741;18723:15;:23;;;;:::i;:::-;18701:14;:46::i;:::-;18687:13;:61::i;:::-;18673:75;;18804:80;18823:11;18836:15;18871:5;18853:15;:23;;;;:::i;:::-;18878:5;18804:18;:80::i;:::-;18775:21;18797:3;18775:26;;;;;;;;:::i;:::-;;;;;;;:109;;;;;18429:480;;18303:606;18073:855;17272:1656;18968:1;18964:160;;;19024:1;19015:6;:10;;;;:::i;:::-;18994:12;19007:4;18994:18;;;;;;;;:::i;:::-;;;;;;;:31;;;;;18964:160;;;19103:1;19094:6;:10;;;;:::i;:::-;19074:12;19087:3;19074:17;;;;;;;;:::i;:::-;;;;;;;:30;;;;;18964:160;16892:2247;;;19156:18;19176:23;19203:54;19233:4;19221:10;19214:23;;;;:::i;:::-;19246:9;19203:10;:54::i;:::-;19155:102;;;;19295:308;;;;;;;;19310:9;:18;;;19295:308;;;;;;19347:9;:13;;;19295:308;;;;;;19379:3;:14;;;:21;;;19295:308;;;;;;19419:3;:14;;;:20;;;19295:308;;;;;;2344:6;19480:11;19466;:25;;;;:::i;:::-;:51;;;;:::i;:::-;19295:308;;;;2344:6;19559:16;19545:11;:30;;;;:::i;:::-;:56;;;;:::i;:::-;19295:308;;;19272:15;19288:3;19272:20;;;;;;;;:::i;:::-;;;;;;;:331;;;;15633:3982;;;;;;;15581:4034;15626:5;;;;;;;15581:4034;;;;19627:22;;;;15026:4631;;;:::o;4588:346::-;4687:11;:23;4699:10;4687:23;;;;;;;;;;;;;;;;;;;;;;;;;4679:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4774:5;;:12;;4759:4;;:11;;:27;4751:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4837:9;4849:1;4837:13;;4832:95;4856:4;;:11;;4852:1;:15;4832:95;;;4907:5;;4913:1;4907:8;;;;;;;:::i;:::-;;;;;;;;4889:6;:15;4896:4;;4901:1;4896:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4889:15;;;;;;;;;;;;;;;:26;;;;4869:3;;;;;4832:95;;;;4588:346;;;;:::o;4225:187::-;4286:11;:23;4298:10;4286:23;;;;;;;;;;;;;;;;;;;;;;;;;4278:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4370:1;4353:14;;:18;;;;;;;;;;;;;;;;;;4387:17;4402:1;4387:17;;;;;;:::i;:::-;;;;;;;;4225:187;:::o;5877:387::-;5989:11;:23;6001:10;5989:23;;;;;;;;;;;;;;;;;;;;;;;;;5981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6083:13;;:20;;6068:4;;:11;;:35;6060:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;6153:9;6165:1;6153:13;;6148:109;6172:4;;:11;;6168:1;:15;6148:109;;;6229:13;;6243:1;6229:16;;;;;;;:::i;:::-;;;;;;;;6205:12;:21;6218:4;;6223:1;6218:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6205:21;;;;;;;;;;;;;;;:40;;;;6185:3;;;;;6148:109;;;;5877:387;;;;:::o;3190:28::-;;;;:::o;7961:465::-;8017:20;;:::i;:::-;8048:6;8065;8082:7;8100:6;8117:19;;:::i;:::-;8177:13;8205:16;;8236;;8267:15;;8297:13;;;;;;;;;;;8325:82;;;;;;;;8338:13;;8325:82;;;;8353:13;;8325:82;;;;8368:18;;8325:82;;;;8388:18;;8325:82;;;8155:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7961:465;;;;;;:::o;3890:149::-;3946:11;:23;3958:10;3946:23;;;;;;;;;;;;;;;;;;;;;;;;;3938:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4029:1;4013:6;;:18;;;;;;;;;;;;;;;;;;3890:149;:::o;9284:282::-;9362:11;:23;9374:10;9362:23;;;;;;;;;;;;;;;;;;;;;;;;;9354:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9447:6;:11;;;;;;;;;;:::i;:::-;9435:9;;:23;;;;;;;;;;;;;;;;;;;;9480:6;:10;;;;;;;;;;:::i;:::-;9469:8;;:21;;;;;;;;;;;;;;;;;;;;9512:6;:10;;;;;;;;;;:::i;:::-;9501:8;;:21;;;;;;;;;;;;;;;;;;;;9546:6;:12;;;;;;;;;;:::i;:::-;9533:10;;:25;;;;;;;;;;;;;;;;;;;;9284:282;:::o;7597:90::-;7643:6;7669:10;;;;;;;;;;;7662:17;;7597:90;:::o;7062:218::-;7124:13;7157:8;7168:1;7157:12;;7152:98;7176:8;;;;;;;;;;;7171:13;;:1;:13;;;7152:98;;7215:7;:10;7223:1;7215:10;;;;;;;;;;;;;;;:16;7226:4;7215:16;;;;;;;;;;;;;;;:23;;;7206:32;;;;;:::i;:::-;;;7186:3;;;;:::i;:::-;;;7152:98;;;;7062:218;;;:::o;6780:274::-;6848:25;6922:1;6911:8;;;;;;;;;;;:12;;;;:::i;:::-;6892:32;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6886:38;;6940:8;6951:1;6940:12;;6935:91;6959:8;;;;;;;;;;;6954:13;;:1;:13;;;6935:91;;6998:7;:10;7006:1;6998:10;;;;;;;;;;;;;;;:16;7009:4;6998:16;;;;;;;;;;;;;;;6989:25;;;;;;;;;;;;;;;;;;;;;;;;;:3;6993:1;6989:6;;;;;;;;;;:::i;:::-;;;;;;;:25;;;;6969:3;;;;:::i;:::-;;;6935:91;;;;6780:274;;;:::o;4942:180::-;4999:11;:23;5011:10;4999:23;;;;;;;;;;;;;;;;;;;;;;;;;4991:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5081:1;5070:8;;:12;;;;;;;;;;;;;;;;;;5098:16;5112:1;5098:16;;;;;;:::i;:::-;;;;;;;;4942:180;:::o;24364:691::-;24441:33;24521:5;24503:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24488:39;;24543:9;24555:1;24543:13;;24538:478;24562:5;24558:1;:9;24538:478;;;24590:15;24608:8;:19;24625:1;24617:5;:9;;;;:::i;:::-;24608:19;;;;;;;;;;;;;;;;;;;;;24590:37;;24665:1;24646:21;;:7;:21;;;24642:67;;24688:5;;;24642:67;24724:21;24748:23;;;;;;;;24760:7;24748:23;;;;;;24769:1;24748:23;;;24724:47;;24791:13;24807:1;24791:17;;24786:184;24820:8;;;;;;;;;;;24810:18;;:6;:18;;;24786:184;;24879:7;:15;24887:6;24879:15;;;;;;;;;;;;;;;:24;24895:7;24879:24;;;;;;;;;;;;;;;:31;;;24859:2;:16;;:51;;;;;;;:::i;:::-;;;;;;;;24830:8;;;;:::i;:::-;;;24786:184;;;;25002:2;24984:12;24997:1;24984:15;;;;;;;;:::i;:::-;;;;;;;:20;;;;24574:442;;24569:3;;;;;24538:478;;;;24364:691;;;;:::o;7695:150::-;7743:19;;:::i;:::-;7782:55;;;;;;;;7795:9;;;;;;;;;;;7782:55;;;;;;7806:8;;;;;;;;;;;7782:55;;;;;;7816:8;;;;;;;;;;;7782:55;;;;;;7826:10;;;;;;;;;;;7782:55;;;;;7775:62;;7695:150;:::o;8436:99::-;8485:7;8520:6;;;;;;;;;;;8505:22;;8436:99;:::o;6396:273::-;6468:11;:23;6480:10;6468:23;;;;;;;;;;;;;;;;;;;;;;;;;6460:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;6550:10;6545:15;;:1;:15;;;6541:89;;6585:4;6577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6541:89;6657:4;6640:11;:14;6652:1;6640:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;6396:273;;:::o;4420:160::-;4485:11;:23;4497:10;4485:23;;;;;;;;;;;;;;;;;;;;;;;;;4477:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4567:5;4554:10;;:18;;;;;;;;;;;;;;;;;;4420:160;:::o;5636:114::-;5697:6;5723:13;:19;5737:4;5723:19;;;;;;;;;;;;;;;;5716:26;;5636:114;;;:::o;4047:170::-;4100:11;:23;4112:10;4100:23;;;;;;;;;;;;;;;;;;;;;;;;;4092:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4176:1;4167:6;;:10;;;;;;;;;;;;;;;;;;4193:16;4207:1;4193:16;;;;;;:::i;:::-;;;;;;;;4047:170;:::o;11275:3554::-;11340:39;11401:6;;;;;;;;;;;11400:7;11392:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11451:22;11462:10;11451;:22::i;:::-;11484:31;11518:6;;;;;;;;;;;:29;;;11555:9;11566:3;11518:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11484:86;;11620:8;:15;11599:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11581:55;;11649:24;;:::i;:::-;11684:21;11716:23;11742:1;11716:27;;11759:11;11773:1;11759:15;;11754:2991;11782:8;:15;11776:3;:21;11754:2991;;;11827:8;11836:3;11827:13;;;;;;;;:::i;:::-;;;;;;;;11821:19;;11877:10;;;;;;;;;;;11859:28;;:3;:10;;;:14;;;:28;;;11908:8;11855:77;11948:11;11962:49;11975:3;:10;;;:19;;;11996:3;:10;;;:14;;;11962:12;:49::i;:::-;11948:63;;12026:17;12077:20;12131:6;:12;12138:4;12131:12;;;;;;;;;;;;;;;;12116:27;;12183:1;12167:12;:17;12163:74;;12209:8;;;;;12163:74;12286:1;12261:3;:14;;;:21;;;:26;;;12257:262;;12371:97;;;;;;;;12386:3;:10;;;:19;;;12371:97;;;;;;12406:3;:10;;;:14;;;12371:97;;;;;;12421:3;:14;;;:21;;;12371:97;;;;;;12443:3;:14;;;:20;;;12371:97;;;;;;12464:1;12371:97;;;;12466:1;12371:97;;;12348:15;12364:3;12348:20;;;;;;;;:::i;:::-;;;;;;;:120;;;;12491:8;;;;;12257:262;12582:3;:14;;;:20;;;12559:43;;:3;:14;;;:20;;;:43;;;12555:260;;;12667:3;:14;;;:20;;;12644:3;:14;;;:20;;;:43;;;;:::i;:::-;12628:59;;12555:260;;;12775:3;:14;;;:20;;;12752:3;:14;;;:20;;;:43;;;;:::i;:::-;12736:59;;12555:260;12847:51;12861:12;12883:13;12875:22;;12847:13;:51::i;:::-;12835:63;;12058:856;12928:18;2459:6;12984:3;:14;;;:24;;;12957:3;:14;;;:24;;;:51;;;;:::i;:::-;12949:60;;:88;;;;:::i;:::-;12928:109;;13089:18;13109:23;13136:54;13166:4;13154:10;13147:23;;;;:::i;:::-;13179:9;13136:10;:54::i;:::-;13088:102;;;;13207:18;13228:60;13245:4;13251:13;:19;13265:4;13251:19;;;;;;;;;;;;;;;;13283:4;13272:10;:15;;;;:::i;:::-;13228:16;:60::i;:::-;13207:81;;13347:1;13325:13;:19;13339:4;13325:19;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;13303:13;:19;13317:4;13303:19;;;;;;;;;;;;;;;:45;;;;13365:23;2344:6;13413:11;13399;:25;;;;:::i;:::-;:51;;;;:::i;:::-;13365:86;;13466:28;2344:6;13519:16;13505:11;:30;;;;:::i;:::-;:56;;;;:::i;:::-;13466:96;;13584:14;;;;;;;;;;;13580:984;;;13619:51;13649:20;13631:15;:38;;;;:::i;:::-;13619:11;:51::i;:::-;13694:381;13709:10;13746:3;:10;;;:19;;;13792:3;:10;;;:14;;;13833:3;:14;;;:20;;;13881:13;13939:6;13928:10;:17;;;;:::i;:::-;13973:15;14016:20;14063:11;13694:381;;;;;;;;;;;;;;:::i;:::-;;;;;;;;14131:20;14113:15;:38;;;;:::i;:::-;14094:57;;;;;:::i;:::-;;;13580:984;;;14197:351;14214:10;14247:3;:10;;;:19;;;14289:3;:10;;;:14;;;14326:3;:14;;;:20;;;14370:13;14424:6;14413:10;:17;;;;:::i;:::-;14454:15;14493:20;14536:11;14197:351;;;;;;;;;;;;;;:::i;:::-;;;;;;;;13580:984;14603:130;;;;;;;;14618:3;:10;;;:19;;;14603:130;;;;;;14638:3;:10;;;:14;;;14603:130;;;;;;14653:3;:14;;;:21;;;14603:130;;;;;;14675:3;:14;;;:20;;;14603:130;;;;;;14696:15;14603:130;;;;14712:20;14603:130;;;14580:15;14596:3;14580:20;;;;;;;;:::i;:::-;;;;;;;:153;;;;11806:2939;;;;;;;;11754:2991;11799:5;;;;;;;11754:2991;;;;14771:15;14755:12;;:31;;;;;;;:::i;:::-;;;;;;;;14799:22;;;;11275:3554;;;:::o;5130:91::-;5179:6;5205:8;;;;;;;;;;;5198:15;;5130:91;:::o;8543:733::-;8804:11;:23;8816:10;8804:23;;;;;;;;;;;;;;;;;;;;;;;;;8796:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8884:2;8868:13;:18;;;;;;:::i;:::-;;;;8916:17;8897:16;:36;;;;8963:17;8944:16;:36;;;;9009:16;8991:15;:34;;;;9052:14;9036:13;;:30;;;;;;;;;;;;;;;;;;9095:2;:18;;;9079:13;:34;;;;9140:2;:18;;;9124:13;:34;;;;9190:2;:23;;;9169:18;:44;;;;9245:2;:23;;;9224:18;:44;;;;8543:733;;;;;;:::o;6272:116::-;6335:7;6362:12;:18;6375:4;6362:18;;;;;;;;;;;;;;;;6355:25;;6272:116;;;:::o;6677:95::-;6725:7;6752:12;;6745:19;;6677:95;:::o;5758:107::-;5815:6;5841:10;:16;5852:4;5841:16;;;;;;;;;;;;;;;;5834:23;;5758:107;;;:::o;7444:145::-;7527:7;7554;:15;7562:6;7554:15;;;;;;;;;;;;;;;:21;7570:4;7554:21;;;;;;;;;;;;;;;:27;;;7547:34;;7444:145;;;;:::o;11009:258::-;11086:11;11142:8;11134:16;;11182:4;11176;11172:15;11164:23;;11219:7;11213:4;11209:18;11201:26;;11009:258;;;;:::o;21861:167::-;21946:7;22009:11;2459:6;21973:9;:35;;;;:::i;:::-;:47;;;;:::i;:::-;21966:54;;21861:167;;;;:::o;19666:449::-;19782:7;19791:4;19814:9;19826:1;19814:13;;19809:271;19833:1;:8;19829:1;:12;19809:271;;;19879:1;19867:8;:13;;;;:29;;;;;19895:1;19884:7;:12;;;;19867:29;:65;;;;;19924:8;19900:32;;:1;19902;19900:4;;;;;;;;:::i;:::-;;;;;;;;:11;;;:20;;;:32;;;19867:65;:95;;;;;19955:7;19936:26;;:1;19938;19936:4;;;;;;;;:::i;:::-;;;;;;;;:11;;;:15;;;:26;;;19867:95;19863:206;;;19990:3;19986:1;:7;19982:72;;;20026:1;20029:4;20018:16;;;;;;;19982:72;19863:206;19843:3;;;;;19809:271;;;;20098:1;20101:5;20090:17;;;;19666:449;;;;;;;;:::o;23612:199::-;23698:7;2459:6;23762:12;2503:18;23750:24;;;;:::i;:::-;23739:8;2503:18;2459:6;2571:37;;;;:::i;:::-;23726:21;;;;:::i;:::-;:48;;;;:::i;:::-;23725:78;;;;:::i;:::-;23718:85;;23612:199;;;;:::o;21692:161::-;21765:6;21839;2344;21801:8;21792:6;:17;;;;:::i;:::-;21791:45;;;;:::i;:::-;:54;;;;:::i;:::-;21784:61;;21692:161;;;;:::o;21288:396::-;21360:15;21443;2344:6;21475:13;:16;;;;;;;;;;;;21468:24;;21462:3;:30;;;;:::i;:::-;21461:58;;;;:::i;:::-;21443:76;;21530:15;2344:6;21563:13;:16;;;;;;;;;;;;21556:24;;21549:4;:31;;;;:::i;:::-;21548:59;;;;:::i;:::-;21530:77;;21668:8;21657;21632:13;:21;;;;;;;;;;;;21625:29;;:40;;;;:::i;:::-;:51;;;;:::i;:::-;21618:58;;;;21288:396;;;;:::o;20344:302::-;20406:22;20456:16;;20445:8;:27;20441:172;;;20496:16;;20489:23;;;;20441:172;20545:16;;20534:8;:27;20530:83;;;20585:16;;20578:23;;;;20530:83;20630:8;20623:15;;20344:302;;;;:::o;20654:626::-;20792:6;20980:16;;20961:15;:35;:50;;;;;21010:1;21000:7;:11;20961:50;:72;;;;;21032:1;21015:14;:18;20961:72;20957:282;;;21076:7;21057:16;:26;;;;:::i;:::-;21050:33;;;;20957:282;21124:16;;21105:15;:35;:50;;;;;21154:1;21144:7;:11;21105:50;:72;;;;;21176:1;21159:14;:18;21105:72;21101:138;;;21220:7;21201:16;:26;;;;:::i;:::-;21194:33;;;;21101:138;21256:16;21249:23;;20654:626;;;;;;;:::o;23425:179::-;23503:6;23511;23538:25;23553:9;23538:14;:25::i;:::-;23565:30;23585:9;23565:19;:30::i;:::-;23530:66;;;;23425:179;;;;;:::o;10632:369::-;10716:1;10697:21;;:7;:21;;;10689:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10766:8;10777:1;10766:12;;10761:144;10785:8;;;;;;;;;;;10780:13;;:1;:13;;;10761:144;;10847:1;10819:7;:10;10827:1;10819:10;;;;;;;;;;;;;;;:19;10830:7;10819:19;;;;;;;;;;;;;;;:25;;;:29;10815:79;;;10871:7;;;10815:79;10795:3;;;;;:::i;:::-;;;;10761:144;;;;10942:7;10916:8;:23;10925:13;;10916:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;10992:1;10976:13;;:17;;;;:::i;:::-;10960:13;:33;;;;10632:369;;:::o;22036:626::-;22127:17;22199:21;22223:45;22238:12;:18;22251:4;22238:18;;;;;;;;;;;;;;;;22258:9;22223:14;:45::i;:::-;22199:69;;22300:13;22279:12;:18;22292:4;22279:18;;;;;;;;;;;;;;;:34;;;;22412:13;;;;;;;;;;;22399:26;;22408:1;22399:6;:10;;;;:::i;:::-;:26;22395:89;;;2344:6;22442:30;;;;;22395:89;22574:80;22589:4;22595:58;22612:15;;22637:13;22595:9;:58::i;:::-;22574:14;:80::i;:::-;22567:87;;;22036:626;;;;;;:::o;14839:176::-;14895:24;14922:7;:17;14930:8;;;;;;;;;;;14922:17;;;;;;;;;;;;;;;:29;14940:10;14922:29;;;;;;;;;;;;;;;14895:56;;14976:6;14962:3;:10;;;:20;;;;;;;:::i;:::-;;;;;;;;15006:1;14993:3;:9;;;:14;;;;;;;:::i;:::-;;;;;;;;14884:131;14839:176;:::o;22672:367::-;22736:6;22769:262;22791:206;2401:6;22924:9;22914;22904:8;;;;;;;;;;;22897:16;;:26;;;;:::i;:::-;:36;;;;:::i;:::-;:62;;;;:::i;:::-;2344:6;22839:9;22828;;;;;;;;;;;22821:17;;:27;;;;:::i;:::-;:51;;;;:::i;:::-;:138;;;;:::i;:::-;22983:13;;22791:3;:206::i;:::-;23017:13;;22769:3;:262::i;:::-;22762:269;;22672:367;;;:::o;23047:369::-;23116:6;23142:266;23164:206;2401:6;23293:9;23283;23271:10;;;;;;;;;;;23264:18;;:28;;;;:::i;:::-;:38;;;;:::i;:::-;:64;;;;:::i;:::-;2344:6;23207:9;23197:8;;;;;;;;;;;23190:16;;:26;;;;:::i;:::-;:50;;;;:::i;:::-;:138;;;;:::i;:::-;23351:18;;23164:3;:206::i;:::-;23389:18;;23142:3;:266::i;:::-;23135:273;;23047:369;;;:::o;23823:533::-;23890:22;23963;23988:13;:19;24002:4;23988:19;;;;;;;;;;;;;;;;23963:44;;24018:26;24065:3;24047:15;:21;;;;:::i;:::-;24018:50;;24099:55;24113:40;24128:3;24133:19;24113:14;:40::i;:::-;24099:13;:55::i;:::-;24081:73;;24189:78;24208:15;24225;24242:19;24263:3;24189:18;:78::i;:::-;24167:13;:19;24181:4;24167:19;;;;;;;;;;;;;;;:100;;;;24297:15;24278:10;:16;24289:4;24278:16;;;;;;;;;;;;;;;:34;;;;24325:22;;23823:533;;;;:::o;20234:102::-;20289:6;20319:1;20315;:5;:13;;20327:1;20315:13;;;20323:1;20315:13;20308:20;;20234:102;;;;:::o;20123:103::-;20178:6;20209:1;20204;:6;;:14;;20217:1;20204:14;;;20213:1;20204:14;20197:21;;20123:103;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:101::-;877:7;917:18;910:5;906:30;895:41;;841:101;;;:::o;948:120::-;1020:23;1037:5;1020:23;:::i;:::-;1013:5;1010:34;1000:62;;1058:1;1055;1048:12;1000:62;948:120;:::o;1074:137::-;1119:5;1157:6;1144:20;1135:29;;1173:32;1199:5;1173:32;:::i;:::-;1074:137;;;;:::o;1217:472::-;1284:6;1292;1341:2;1329:9;1320:7;1316:23;1312:32;1309:119;;;1347:79;;:::i;:::-;1309:119;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:52;1664:7;1655:6;1644:9;1640:22;1620:52;:::i;:::-;1610:62;;1565:117;1217:472;;;;;:::o;1695:77::-;1732:7;1761:5;1750:16;;1695:77;;;:::o;1778:118::-;1865:24;1883:5;1865:24;:::i;:::-;1860:3;1853:37;1778:118;;:::o;1902:222::-;1995:4;2033:2;2022:9;2018:18;2010:26;;2046:71;2114:1;2103:9;2099:17;2090:6;2046:71;:::i;:::-;1902:222;;;;:::o;2130:103::-;2166:7;2206:20;2199:5;2195:32;2184:43;;2130:103;;;:::o;2239:120::-;2311:23;2328:5;2311:23;:::i;:::-;2304:5;2301:34;2291:62;;2349:1;2346;2339:12;2291:62;2239:120;:::o;2365:137::-;2410:5;2448:6;2435:20;2426:29;;2464:32;2490:5;2464:32;:::i;:::-;2365:137;;;;:::o;2508:327::-;2566:6;2615:2;2603:9;2594:7;2590:23;2586:32;2583:119;;;2621:79;;:::i;:::-;2583:119;2741:1;2766:52;2810:7;2801:6;2790:9;2786:22;2766:52;:::i;:::-;2756:62;;2712:116;2508:327;;;;:::o;2841:117::-;2950:1;2947;2940:12;2964:117;3073:1;3070;3063:12;3087:117;3196:1;3193;3186:12;3226:567;3298:8;3308:6;3358:3;3351:4;3343:6;3339:17;3335:27;3325:122;;3366:79;;:::i;:::-;3325:122;3479:6;3466:20;3456:30;;3509:18;3501:6;3498:30;3495:117;;;3531:79;;:::i;:::-;3495:117;3645:4;3637:6;3633:17;3621:29;;3699:3;3691:4;3683:6;3679:17;3669:8;3665:32;3662:41;3659:128;;;3706:79;;:::i;:::-;3659:128;3226:567;;;;;:::o;3815:::-;3887:8;3897:6;3947:3;3940:4;3932:6;3928:17;3924:27;3914:122;;3955:79;;:::i;:::-;3914:122;4068:6;4055:20;4045:30;;4098:18;4090:6;4087:30;4084:117;;;4120:79;;:::i;:::-;4084:117;4234:4;4226:6;4222:17;4210:29;;4288:3;4280:4;4272:6;4268:17;4258:8;4254:32;4251:41;4248:128;;;4295:79;;:::i;:::-;4248:128;3815:567;;;;;:::o;4388:930::-;4508:6;4516;4524;4532;4581:2;4569:9;4560:7;4556:23;4552:32;4549:119;;;4587:79;;:::i;:::-;4549:119;4735:1;4724:9;4720:17;4707:31;4765:18;4757:6;4754:30;4751:117;;;4787:79;;:::i;:::-;4751:117;4900:79;4971:7;4962:6;4951:9;4947:22;4900:79;:::i;:::-;4882:97;;;;4678:311;5056:2;5045:9;5041:18;5028:32;5087:18;5079:6;5076:30;5073:117;;;5109:79;;:::i;:::-;5073:117;5222:79;5293:7;5284:6;5273:9;5269:22;5222:79;:::i;:::-;5204:97;;;;4999:312;4388:930;;;;;;;:::o;5324:122::-;5397:24;5415:5;5397:24;:::i;:::-;5390:5;5387:35;5377:63;;5436:1;5433;5426:12;5377:63;5324:122;:::o;5452:139::-;5498:5;5536:6;5523:20;5514:29;;5552:33;5579:5;5552:33;:::i;:::-;5452:139;;;;:::o;5597:907::-;5690:6;5698;5706;5714;5722;5771:3;5759:9;5750:7;5746:23;5742:33;5739:120;;;5778:79;;:::i;:::-;5739:120;5898:1;5923:52;5967:7;5958:6;5947:9;5943:22;5923:52;:::i;:::-;5913:62;;5869:116;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;6152:2;6178:53;6223:7;6214:6;6203:9;6199:22;6178:53;:::i;:::-;6168:63;;6123:118;6280:2;6306:52;6350:7;6341:6;6330:9;6326:22;6306:52;:::i;:::-;6296:62;;6251:117;6407:3;6434:53;6479:7;6470:6;6459:9;6455:22;6434:53;:::i;:::-;6424:63;;6378:119;5597:907;;;;;;;;:::o;6510:76::-;6546:7;6575:5;6564:16;;6510:76;;;:::o;6592:120::-;6664:23;6681:5;6664:23;:::i;:::-;6657:5;6654:34;6644:62;;6702:1;6699;6692:12;6644:62;6592:120;:::o;6718:137::-;6763:5;6801:6;6788:20;6779:29;;6817:32;6843:5;6817:32;:::i;:::-;6718:137;;;;:::o;6861:117::-;6970:1;6967;6960:12;7023:236;7100:5;7141:3;7132:6;7127:3;7123:16;7119:26;7116:113;;;7148:79;;:::i;:::-;7116:113;7247:6;7238:15;;7023:236;;;;:::o;7305:::-;7383:5;7424:2;7415:6;7410:3;7406:16;7402:25;7399:112;;;7430:79;;:::i;:::-;7399:112;7529:6;7520:15;;7305:236;;;;:::o;7586:::-;7663:5;7704:3;7695:6;7690:3;7686:16;7682:26;7679:113;;;7711:79;;:::i;:::-;7679:113;7810:6;7801:15;;7586:236;;;;:::o;7828:93::-;7864:7;7904:10;7897:5;7893:22;7882:33;;7828:93;;;:::o;7927:120::-;7999:23;8016:5;7999:23;:::i;:::-;7992:5;7989:34;7979:62;;8037:1;8034;8027:12;7979:62;7927:120;:::o;8053:137::-;8098:5;8136:6;8123:20;8114:29;;8152:32;8178:5;8152:32;:::i;:::-;8053:137;;;;:::o;8196:89::-;8232:7;8272:6;8265:5;8261:18;8250:29;;8196:89;;;:::o;8291:120::-;8363:23;8380:5;8363:23;:::i;:::-;8356:5;8353:34;8343:62;;8401:1;8398;8391:12;8343:62;8291:120;:::o;8417:137::-;8462:5;8500:6;8487:20;8478:29;;8516:32;8542:5;8516:32;:::i;:::-;8417:137;;;;:::o;8560:1675::-;8781:6;8789;8797;8805;8813;8821;8829;8837;8845;8894:3;8882:9;8873:7;8869:23;8865:33;8862:120;;;8901:79;;:::i;:::-;8862:120;9021:1;9046:53;9091:7;9082:6;9071:9;9067:22;9046:53;:::i;:::-;9036:63;;8992:117;9148:2;9174:52;9218:7;9209:6;9198:9;9194:22;9174:52;:::i;:::-;9164:62;;9119:117;9275:2;9301:52;9345:7;9336:6;9325:9;9321:22;9301:52;:::i;:::-;9291:62;;9246:117;9402:2;9428:53;9473:7;9464:6;9453:9;9449:22;9428:53;:::i;:::-;9418:63;;9373:118;9530:3;9557:84;9633:7;9624:6;9613:9;9609:22;9557:84;:::i;:::-;9547:94;;9501:150;9690:3;9717:85;9794:7;9785:6;9774:9;9770:22;9717:85;:::i;:::-;9707:95;;9661:151;9851:3;9878:84;9954:7;9945:6;9934:9;9930:22;9878:84;:::i;:::-;9868:94;;9822:150;10011:3;10038:52;10082:7;10073:6;10062:9;10058:22;10038:52;:::i;:::-;10028:62;;9982:118;10139:3;10166:52;10210:7;10201:6;10190:9;10186:22;10166:52;:::i;:::-;10156:62;;10110:118;8560:1675;;;;;;;;;;;:::o;10241:617::-;10317:6;10325;10333;10382:2;10370:9;10361:7;10357:23;10353:32;10350:119;;;10388:79;;:::i;:::-;10350:119;10508:1;10533:52;10577:7;10568:6;10557:9;10553:22;10533:52;:::i;:::-;10523:62;;10479:116;10634:2;10660:53;10705:7;10696:6;10685:9;10681:22;10660:53;:::i;:::-;10650:63;;10605:118;10762:2;10788:53;10833:7;10824:6;10813:9;10809:22;10788:53;:::i;:::-;10778:63;;10733:118;10241:617;;;;;:::o;10864:148::-;10965:6;10999:5;10993:12;10983:22;;10864:148;;;:::o;11018:218::-;11151:11;11185:6;11180:3;11173:19;11225:4;11220:3;11216:14;11201:29;;11018:218;;;;:::o;11242:166::-;11343:4;11366:3;11358:11;;11396:4;11391:3;11387:14;11379:22;;11242:166;;;:::o;11414:108::-;11491:24;11509:5;11491:24;:::i;:::-;11486:3;11479:37;11414:108;;:::o;11528:::-;11605:24;11623:5;11605:24;:::i;:::-;11600:3;11593:37;11528:108;;:::o;11716:508::-;11861:4;11856:3;11852:14;11950:4;11943:5;11939:16;11933:23;11969:63;12026:4;12021:3;12017:14;12003:12;11969:63;:::i;:::-;11876:166;12125:4;12118:5;12114:16;12108:23;12144:63;12201:4;12196:3;12192:14;12178:12;12144:63;:::i;:::-;12052:165;11830:394;11716:508;;:::o;12314:576::-;12469:4;12464:3;12460:14;12556:4;12549:5;12545:16;12539:23;12575:63;12632:4;12627:3;12623:14;12609:12;12575:63;:::i;:::-;12484:164;12733:4;12726:5;12722:16;12716:23;12752:121;12867:4;12862:3;12858:14;12844:12;12752:121;:::i;:::-;12658:225;12438:452;12314:576;;:::o;12896:315::-;13033:10;13054:114;13164:3;13156:6;13054:114;:::i;:::-;13200:4;13195:3;13191:14;13177:28;;12896:315;;;;:::o;13217:147::-;13321:4;13353;13348:3;13344:14;13336:22;;13217:147;;;:::o;13458:1004::-;13645:3;13674:88;13756:5;13674:88;:::i;:::-;13778:120;13891:6;13886:3;13778:120;:::i;:::-;13771:127;;13922:90;14006:5;13922:90;:::i;:::-;14035:7;14066:1;14051:386;14076:6;14073:1;14070:13;14051:386;;;14152:6;14146:13;14179:131;14306:3;14291:13;14179:131;:::i;:::-;14172:138;;14333:94;14420:6;14333:94;:::i;:::-;14323:104;;14111:326;14098:1;14095;14091:9;14086:14;;14051:386;;;14055:14;14453:3;14446:10;;13650:812;;;13458:1004;;;;:::o;14468:509::-;14679:4;14717:2;14706:9;14702:18;14694:26;;14766:9;14760:4;14756:20;14752:1;14741:9;14737:17;14730:47;14794:176;14965:4;14956:6;14794:176;:::i;:::-;14786:184;;14468:509;;;;:::o;14983:117::-;15092:1;15089;15082:12;15106:102;15147:6;15198:2;15194:7;15189:2;15182:5;15178:14;15174:28;15164:38;;15106:102;;;:::o;15214:180::-;15262:77;15259:1;15252:88;15359:4;15356:1;15349:15;15383:4;15380:1;15373:15;15400:281;15483:27;15505:4;15483:27;:::i;:::-;15475:6;15471:40;15613:6;15601:10;15598:22;15577:18;15565:10;15562:34;15559:62;15556:88;;;15624:18;;:::i;:::-;15556:88;15664:10;15660:2;15653:22;15443:238;15400:281;;:::o;15687:129::-;15721:6;15748:20;;:::i;:::-;15738:30;;15777:33;15805:4;15797:6;15777:33;:::i;:::-;15687:129;;;:::o;15822:307::-;15883:4;15973:18;15965:6;15962:30;15959:56;;;15995:18;;:::i;:::-;15959:56;16033:29;16055:6;16033:29;:::i;:::-;16025:37;;16117:4;16111;16107:15;16099:23;;15822:307;;;:::o;16135:148::-;16233:6;16228:3;16223;16210:30;16274:1;16265:6;16260:3;16256:16;16249:27;16135:148;;;:::o;16289:423::-;16366:5;16391:65;16407:48;16448:6;16407:48;:::i;:::-;16391:65;:::i;:::-;16382:74;;16479:6;16472:5;16465:21;16517:4;16510:5;16506:16;16555:3;16546:6;16541:3;16537:16;16534:25;16531:112;;;16562:79;;:::i;:::-;16531:112;16652:54;16699:6;16694:3;16689;16652:54;:::i;:::-;16372:340;16289:423;;;;;:::o;16731:338::-;16786:5;16835:3;16828:4;16820:6;16816:17;16812:27;16802:122;;16843:79;;:::i;:::-;16802:122;16960:6;16947:20;16985:78;17059:3;17051:6;17044:4;17036:6;17032:17;16985:78;:::i;:::-;16976:87;;16792:277;16731:338;;;;:::o;17075:507::-;17143:6;17192:2;17180:9;17171:7;17167:23;17163:32;17160:119;;;17198:79;;:::i;:::-;17160:119;17346:1;17335:9;17331:17;17318:31;17376:18;17368:6;17365:30;17362:117;;;17398:79;;:::i;:::-;17362:117;17503:62;17557:7;17548:6;17537:9;17533:22;17503:62;:::i;:::-;17493:72;;17289:286;17075:507;;;;:::o;17588:145::-;17686:6;17720:5;17714:12;17704:22;;17588:145;;;:::o;17739:215::-;17869:11;17903:6;17898:3;17891:19;17943:4;17938:3;17934:14;17919:29;;17739:215;;;;:::o;17960:163::-;18058:4;18081:3;18073:11;;18111:4;18106:3;18102:14;18094:22;;17960:163;;;:::o;18129:86::-;18164:7;18204:4;18197:5;18193:16;18182:27;;18129:86;;;:::o;18221:102::-;18294:22;18310:5;18294:22;:::i;:::-;18289:3;18282:35;18221:102;;:::o;18329:105::-;18404:23;18421:5;18404:23;:::i;:::-;18399:3;18392:36;18329:105;;:::o;18440:146::-;18477:7;18517:62;18510:5;18506:74;18495:85;;18440:146;;;:::o;18592:108::-;18669:24;18687:5;18669:24;:::i;:::-;18664:3;18657:37;18592:108;;:::o;18784:1232::-;18933:4;18928:3;18924:14;19025:4;19018:5;19014:16;19008:23;19044:59;19097:4;19092:3;19088:14;19074:12;19044:59;:::i;:::-;18948:165;19199:4;19192:5;19188:16;19182:23;19218:61;19273:4;19268:3;19264:14;19250:12;19218:61;:::i;:::-;19123:166;19373:4;19366:5;19362:16;19356:23;19392:61;19447:4;19442:3;19438:14;19424:12;19392:61;:::i;:::-;19299:164;19550:4;19543:5;19539:16;19533:23;19569:63;19626:4;19621:3;19617:14;19603:12;19569:63;:::i;:::-;19473:169;19731:4;19724:5;19720:16;19714:23;19750:63;19807:4;19802:3;19798:14;19784:12;19750:63;:::i;:::-;19652:171;19917:4;19910:5;19906:16;19900:23;19936:63;19993:4;19988:3;19984:14;19970:12;19936:63;:::i;:::-;19833:176;18902:1114;18784:1232;;:::o;20022:303::-;20153:10;20174:108;20278:3;20270:6;20174:108;:::i;:::-;20314:4;20309:3;20305:14;20291:28;;20022:303;;;;:::o;20331:144::-;20432:4;20464;20459:3;20455:14;20447:22;;20331:144;;;:::o;20563:980::-;20744:3;20773:85;20852:5;20773:85;:::i;:::-;20874:117;20984:6;20979:3;20874:117;:::i;:::-;20867:124;;21015:87;21096:5;21015:87;:::i;:::-;21125:7;21156:1;21141:377;21166:6;21163:1;21160:13;21141:377;;;21242:6;21236:13;21269:125;21390:3;21375:13;21269:125;:::i;:::-;21262:132;;21417:91;21501:6;21417:91;:::i;:::-;21407:101;;21201:317;21188:1;21185;21181:9;21176:14;;21141:377;;;21145:14;21534:3;21527:10;;20749:794;;;20563:980;;;;:::o;21549:497::-;21754:4;21792:2;21781:9;21777:18;21769:26;;21841:9;21835:4;21831:20;21827:1;21816:9;21812:17;21805:47;21869:170;22034:4;22025:6;21869:170;:::i;:::-;21861:178;;21549:497;;;;:::o;22069:568::-;22142:8;22152:6;22202:3;22195:4;22187:6;22183:17;22179:27;22169:122;;22210:79;;:::i;:::-;22169:122;22323:6;22310:20;22300:30;;22353:18;22345:6;22342:30;22339:117;;;22375:79;;:::i;:::-;22339:117;22489:4;22481:6;22477:17;22465:29;;22543:3;22535:4;22527:6;22523:17;22513:8;22509:32;22506:41;22503:128;;;22550:79;;:::i;:::-;22503:128;22069:568;;;;;:::o;22643:932::-;22764:6;22772;22780;22788;22837:2;22825:9;22816:7;22812:23;22808:32;22805:119;;;22843:79;;:::i;:::-;22805:119;22991:1;22980:9;22976:17;22963:31;23021:18;23013:6;23010:30;23007:117;;;23043:79;;:::i;:::-;23007:117;23156:79;23227:7;23218:6;23207:9;23203:22;23156:79;:::i;:::-;23138:97;;;;22934:311;23312:2;23301:9;23297:18;23284:32;23343:18;23335:6;23332:30;23329:117;;;23365:79;;:::i;:::-;23329:117;23478:80;23550:7;23541:6;23530:9;23526:22;23478:80;:::i;:::-;23460:98;;;;23255:313;22643:932;;;;;;;:::o;23581:90::-;23615:7;23658:5;23651:13;23644:21;23633:32;;23581:90;;;:::o;23677:116::-;23747:21;23762:5;23747:21;:::i;:::-;23740:5;23737:32;23727:60;;23783:1;23780;23773:12;23727:60;23677:116;:::o;23799:133::-;23842:5;23880:6;23867:20;23858:29;;23896:30;23920:5;23896:30;:::i;:::-;23799:133;;;;:::o;23938:323::-;23994:6;24043:2;24031:9;24022:7;24018:23;24014:32;24011:119;;;24049:79;;:::i;:::-;24011:119;24169:1;24194:50;24236:7;24227:6;24216:9;24212:22;24194:50;:::i;:::-;24184:60;;24140:114;23938:323;;;;:::o;24267:90::-;24302:7;24345:5;24342:1;24331:20;24320:31;;24267:90;;;:::o;24363:102::-;24436:22;24452:5;24436:22;:::i;:::-;24431:3;24424:35;24363:102;;:::o;24547:678::-;24704:4;24699:3;24695:14;24789:4;24782:5;24778:16;24772:23;24808:59;24861:4;24856:3;24852:14;24838:12;24808:59;:::i;:::-;24719:158;24957:4;24950:5;24946:16;24940:23;24976:59;25029:4;25024:3;25020:14;25006:12;24976:59;:::i;:::-;24887:158;25130:4;25123:5;25119:16;25113:23;25149:59;25202:4;25197:3;25193:14;25179:12;25149:59;:::i;:::-;25055:163;24673:552;24547:678;;:::o;25231:115::-;25316:23;25333:5;25316:23;:::i;:::-;25311:3;25304:36;25231:115;;:::o;25352:::-;25437:23;25454:5;25437:23;:::i;:::-;25432:3;25425:36;25352:115;;:::o;25473:105::-;25548:23;25565:5;25548:23;:::i;:::-;25543:3;25536:36;25473:105;;:::o;25658:909::-;25813:4;25808:3;25804:14;25911:4;25904:5;25900:16;25894:23;25930:61;25985:4;25980:3;25976:14;25962:12;25930:61;:::i;:::-;25828:173;26094:4;26087:5;26083:16;26077:23;26113:61;26168:4;26163:3;26159:14;26145:12;26113:61;:::i;:::-;26011:173;26282:4;26275:5;26271:16;26265:23;26301:61;26356:4;26351:3;26347:14;26333:12;26301:61;:::i;:::-;26194:178;26470:4;26463:5;26459:16;26453:23;26489:61;26544:4;26539:3;26535:14;26521:12;26489:61;:::i;:::-;26382:178;25782:785;25658:909;;:::o;26573:1001::-;26918:4;26956:3;26945:9;26941:19;26933:27;;26970:131;27098:1;27087:9;27083:17;27074:6;26970:131;:::i;:::-;27111:70;27177:2;27166:9;27162:18;27153:6;27111:70;:::i;:::-;27191:71;27257:3;27246:9;27242:19;27233:6;27191:71;:::i;:::-;27272:73;27340:3;27329:9;27325:19;27316:6;27272:73;:::i;:::-;27355:71;27421:3;27410:9;27406:19;27397:6;27355:71;:::i;:::-;27436:131;27562:3;27551:9;27547:19;27538:6;27436:131;:::i;:::-;26573:1001;;;;;;;;;:::o;27580:329::-;27639:6;27688:2;27676:9;27667:7;27663:23;27659:32;27656:119;;;27694:79;;:::i;:::-;27656:119;27814:1;27839:53;27884:7;27875:6;27864:9;27860:22;27839:53;:::i;:::-;27829:63;;27785:117;27580:329;;;;:::o;27915:392::-;28005:6;28054:3;28042:9;28033:7;28029:23;28025:33;28022:120;;;28061:79;;:::i;:::-;28022:120;28181:1;28206:84;28282:7;28273:6;28262:9;28258:22;28206:84;:::i;:::-;28196:94;;28152:148;27915:392;;;;:::o;28313:115::-;28398:23;28415:5;28398:23;:::i;:::-;28393:3;28386:36;28313:115;;:::o;28434:218::-;28525:4;28563:2;28552:9;28548:18;28540:26;;28576:69;28642:1;28631:9;28627:17;28618:6;28576:69;:::i;:::-;28434:218;;;;:::o;28658:143::-;28754:6;28788:5;28782:12;28772:22;;28658:143;;;:::o;28807:213::-;28935:11;28969:6;28964:3;28957:19;29009:4;29004:3;29000:14;28985:29;;28807:213;;;;:::o;29026:161::-;29122:4;29145:3;29137:11;;29175:4;29170:3;29166:14;29158:22;;29026:161;;;:::o;29193:295::-;29320:10;29341:104;29441:3;29433:6;29341:104;:::i;:::-;29477:4;29472:3;29468:14;29454:28;;29193:295;;;;:::o;29494:142::-;29593:4;29625;29620:3;29616:14;29608:22;;29494:142;;;:::o;29720:964::-;29897:3;29926:83;30003:5;29926:83;:::i;:::-;30025:115;30133:6;30128:3;30025:115;:::i;:::-;30018:122;;30164:85;30243:5;30164:85;:::i;:::-;30272:7;30303:1;30288:371;30313:6;30310:1;30307:13;30288:371;;;30389:6;30383:13;30416:121;30533:3;30518:13;30416:121;:::i;:::-;30409:128;;30560:89;30642:6;30560:89;:::i;:::-;30550:99;;30348:311;30335:1;30332;30328:9;30323:14;;30288:371;;;30292:14;30675:3;30668:10;;29902:782;;;29720:964;;;;:::o;30690:489::-;30891:4;30929:2;30918:9;30914:18;30906:26;;30978:9;30972:4;30968:20;30964:1;30953:9;30949:17;30942:47;31006:166;31167:4;31158:6;31006:166;:::i;:::-;30998:174;;30690:489;;;;:::o;31185:327::-;31243:6;31292:2;31280:9;31271:7;31267:23;31263:32;31260:119;;;31298:79;;:::i;:::-;31260:119;31418:1;31443:52;31487:7;31478:6;31467:9;31463:22;31443:52;:::i;:::-;31433:62;;31389:116;31185:327;;;;:::o;31518:474::-;31586:6;31594;31643:2;31631:9;31622:7;31618:23;31614:32;31611:119;;;31649:79;;:::i;:::-;31611:119;31769:1;31794:53;31839:7;31830:6;31819:9;31815:22;31794:53;:::i;:::-;31784:63;;31740:117;31896:2;31922:53;31967:7;31958:6;31947:9;31943:22;31922:53;:::i;:::-;31912:63;;31867:118;31518:474;;;;;:::o;31998:142::-;32093:6;32127:5;32121:12;32111:22;;31998:142;;;:::o;32146:212::-;32273:11;32307:6;32302:3;32295:19;32347:4;32342:3;32338:14;32323:29;;32146:212;;;;:::o;32364:160::-;32459:4;32482:3;32474:11;;32512:4;32507:3;32503:14;32495:22;;32364:160;;;:::o;32602:512::-;32745:4;32740:3;32736:14;32832:4;32825:5;32821:16;32815:23;32851:63;32908:4;32903:3;32899:14;32885:12;32851:63;:::i;:::-;32760:164;33015:4;33008:5;33004:16;32998:23;33034:63;33091:4;33086:3;33082:14;33068:12;33034:63;:::i;:::-;32934:173;32714:400;32602:512;;:::o;33120:291::-;33245:10;33266:102;33364:3;33356:6;33266:102;:::i;:::-;33400:4;33395:3;33391:14;33377:28;;33120:291;;;;:::o;33417:141::-;33515:4;33547;33542:3;33538:14;33530:22;;33417:141;;;:::o;33640:956::-;33815:3;33844:82;33920:5;33844:82;:::i;:::-;33942:114;34049:6;34044:3;33942:114;:::i;:::-;33935:121;;34080:84;34158:5;34080:84;:::i;:::-;34187:7;34218:1;34203:368;34228:6;34225:1;34222:13;34203:368;;;34304:6;34298:13;34331:119;34446:3;34431:13;34331:119;:::i;:::-;34324:126;;34473:88;34554:6;34473:88;:::i;:::-;34463:98;;34263:308;34250:1;34247;34243:9;34238:14;;34203:368;;;34207:14;34587:3;34580:10;;33820:776;;;33640:956;;;;:::o;34602:485::-;34801:4;34839:2;34828:9;34824:18;34816:26;;34888:9;34882:4;34878:20;34874:1;34863:9;34859:17;34852:47;34916:164;35075:4;35066:6;34916:164;:::i;:::-;34908:172;;34602:485;;;;:::o;35093:91::-;35128:7;35172:5;35168:2;35157:21;35146:32;;35093:91;;;:::o;35190:102::-;35263:22;35279:5;35263:22;:::i;:::-;35258:3;35251:35;35190:102;;:::o;35372:846::-;35527:4;35522:3;35518:14;35614:4;35607:5;35603:16;35597:23;35633:59;35686:4;35681:3;35677:14;35663:12;35633:59;:::i;:::-;35542:160;35783:4;35776:5;35772:16;35766:23;35802:59;35855:4;35850:3;35846:14;35832:12;35802:59;:::i;:::-;35712:159;35952:4;35945:5;35941:16;35935:23;35971:59;36024:4;36019:3;36015:14;36001:12;35971:59;:::i;:::-;35881:159;36123:4;36116:5;36112:16;36106:23;36142:59;36195:4;36190:3;36186:14;36172:12;36142:59;:::i;:::-;36050:161;35496:722;35372:846;;:::o;36224:339::-;36375:4;36413:3;36402:9;36398:19;36390:27;;36427:129;36553:1;36542:9;36538:17;36529:6;36427:129;:::i;:::-;36224:339;;;;:::o;36569:118::-;36656:24;36674:5;36656:24;:::i;:::-;36651:3;36644:37;36569:118;;:::o;36693:222::-;36786:4;36824:2;36813:9;36809:18;36801:26;;36837:71;36905:1;36894:9;36890:17;36881:6;36837:71;:::i;:::-;36693:222;;;;:::o;36921:468::-;36986:6;36994;37043:2;37031:9;37022:7;37018:23;37014:32;37011:119;;;37049:79;;:::i;:::-;37011:119;37169:1;37194:53;37239:7;37230:6;37219:9;37215:22;37194:53;:::i;:::-;37184:63;;37140:117;37296:2;37322:50;37364:7;37355:6;37344:9;37340:22;37322:50;:::i;:::-;37312:60;;37267:115;36921:468;;;;;:::o;37395:327::-;37453:6;37502:2;37490:9;37481:7;37477:23;37473:32;37470:119;;;37508:79;;:::i;:::-;37470:119;37628:1;37653:52;37697:7;37688:6;37677:9;37673:22;37653:52;:::i;:::-;37643:62;;37599:116;37395:327;;;;:::o;37728:218::-;37819:4;37857:2;37846:9;37842:18;37834:26;;37870:69;37936:1;37925:9;37921:17;37912:6;37870:69;:::i;:::-;37728:218;;;;:::o;37952:115::-;38037:23;38054:5;38037:23;:::i;:::-;38032:3;38025:36;37952:115;;:::o;38073:218::-;38164:4;38202:2;38191:9;38187:18;38179:26;;38215:69;38281:1;38270:9;38266:17;38257:6;38215:69;:::i;:::-;38073:218;;;;:::o;38297:1179::-;38461:6;38469;38477;38485;38493;38501;38550:3;38538:9;38529:7;38525:23;38521:33;38518:120;;;38557:79;;:::i;:::-;38518:120;38677:1;38702:85;38779:7;38770:6;38759:9;38755:22;38702:85;:::i;:::-;38692:95;;38648:149;38836:2;38862:52;38906:7;38897:6;38886:9;38882:22;38862:52;:::i;:::-;38852:62;;38807:117;38963:3;38990:52;39034:7;39025:6;39014:9;39010:22;38990:52;:::i;:::-;38980:62;;38934:118;39091:3;39118:53;39163:7;39154:6;39143:9;39139:22;39118:53;:::i;:::-;39108:63;;39062:119;39220:3;39247:84;39323:7;39314:6;39303:9;39299:22;39247:84;:::i;:::-;39237:94;;39191:150;39380:3;39407:52;39451:7;39442:6;39431:9;39427:22;39407:52;:::i;:::-;39397:62;;39351:118;38297:1179;;;;;;;;:::o;39482:169::-;39566:11;39600:6;39595:3;39588:19;39640:4;39635:3;39631:14;39616:29;;39482:169;;;;:::o;39657:221::-;39797:34;39793:1;39785:6;39781:14;39774:58;39866:4;39861:2;39853:6;39849:15;39842:29;39657:221;:::o;39884:366::-;40026:3;40047:67;40111:2;40106:3;40047:67;:::i;:::-;40040:74;;40123:93;40212:3;40123:93;:::i;:::-;40241:2;40236:3;40232:12;40225:19;;39884:366;;;:::o;40256:419::-;40422:4;40460:2;40449:9;40445:18;40437:26;;40509:9;40503:4;40499:20;40495:1;40484:9;40480:17;40473:47;40537:131;40663:4;40537:131;:::i;:::-;40529:139;;40256:419;;;:::o;40681:221::-;40821:34;40817:1;40809:6;40805:14;40798:58;40890:4;40885:2;40877:6;40873:15;40866:29;40681:221;:::o;40908:366::-;41050:3;41071:67;41135:2;41130:3;41071:67;:::i;:::-;41064:74;;41147:93;41236:3;41147:93;:::i;:::-;41265:2;41260:3;41256:12;41249:19;;40908:366;;;:::o;41280:419::-;41446:4;41484:2;41473:9;41469:18;41461:26;;41533:9;41527:4;41523:20;41519:1;41508:9;41504:17;41497:47;41561:131;41687:4;41561:131;:::i;:::-;41553:139;;41280:419;;;:::o;41705:180::-;41753:77;41750:1;41743:88;41850:4;41847:1;41840:15;41874:4;41871:1;41864:15;41891:178;42031:30;42027:1;42019:6;42015:14;42008:54;41891:178;:::o;42075:366::-;42217:3;42238:67;42302:2;42297:3;42238:67;:::i;:::-;42231:74;;42314:93;42403:3;42314:93;:::i;:::-;42432:2;42427:3;42423:12;42416:19;;42075:366;;;:::o;42447:419::-;42613:4;42651:2;42640:9;42636:18;42628:26;;42700:9;42694:4;42690:20;42686:1;42675:9;42671:17;42664:47;42728:131;42854:4;42728:131;:::i;:::-;42720:139;;42447:419;;;:::o;42872:180::-;42920:77;42917:1;42910:88;43017:4;43014:1;43007:15;43041:4;43038:1;43031:15;43058:191;43098:3;43117:20;43135:1;43117:20;:::i;:::-;43112:25;;43151:20;43169:1;43151:20;:::i;:::-;43146:25;;43194:1;43191;43187:9;43180:16;;43215:3;43212:1;43209:10;43206:36;;;43222:18;;:::i;:::-;43206:36;43058:191;;;;:::o;43255:176::-;43395:28;43391:1;43383:6;43379:14;43372:52;43255:176;:::o;43437:366::-;43579:3;43600:67;43664:2;43659:3;43600:67;:::i;:::-;43593:74;;43676:93;43765:3;43676:93;:::i;:::-;43794:2;43789:3;43785:12;43778:19;;43437:366;;;:::o;43809:419::-;43975:4;44013:2;44002:9;43998:18;43990:26;;44062:9;44056:4;44052:20;44048:1;44037:9;44033:17;44026:47;44090:131;44216:4;44090:131;:::i;:::-;44082:139;;43809:419;;;:::o;44234:98::-;44285:6;44319:5;44313:12;44303:22;;44234:98;;;:::o;44338:168::-;44421:11;44455:6;44450:3;44443:19;44495:4;44490:3;44486:14;44471:29;;44338:168;;;;:::o;44512:139::-;44601:6;44596:3;44591;44585:23;44642:1;44633:6;44628:3;44624:16;44617:27;44512:139;;;:::o;44657:373::-;44743:3;44771:38;44803:5;44771:38;:::i;:::-;44825:70;44888:6;44883:3;44825:70;:::i;:::-;44818:77;;44904:65;44962:6;44957:3;44950:4;44943:5;44939:16;44904:65;:::i;:::-;44994:29;45016:6;44994:29;:::i;:::-;44989:3;44985:39;44978:46;;44747:283;44657:373;;;;:::o;45036:309::-;45147:4;45185:2;45174:9;45170:18;45162:26;;45234:9;45228:4;45224:20;45220:1;45209:9;45205:17;45198:47;45262:76;45333:4;45324:6;45262:76;:::i;:::-;45254:84;;45036:309;;;;:::o;45351:340::-;45457:4;45547:18;45539:6;45536:30;45533:56;;;45569:18;;:::i;:::-;45533:56;45619:4;45611:6;45607:17;45599:25;;45679:4;45673;45669:15;45661:23;;45351:340;;;:::o;45697:117::-;45806:1;45803;45796:12;45943:118;46014:22;46030:5;46014:22;:::i;:::-;46007:5;46004:33;45994:61;;46051:1;46048;46041:12;45994:61;45943:118;:::o;46067:139::-;46122:5;46153:6;46147:13;46138:22;;46169:31;46194:5;46169:31;:::i;:::-;46067:139;;;;:::o;46212:141::-;46268:5;46299:6;46293:13;46284:22;;46315:32;46341:5;46315:32;:::i;:::-;46212:141;;;;:::o;46359:::-;46415:5;46446:6;46440:13;46431:22;;46462:32;46488:5;46462:32;:::i;:::-;46359:141;;;;:::o;46530:777::-;46615:5;46659:4;46647:9;46642:3;46638:19;46634:30;46631:117;;;46667:79;;:::i;:::-;46631:117;46766:21;46782:4;46766:21;:::i;:::-;46757:30;;46850:1;46890:58;46944:3;46935:6;46924:9;46920:22;46890:58;:::i;:::-;46883:4;46876:5;46872:16;46865:84;46797:163;47018:2;47059:59;47114:3;47105:6;47094:9;47090:22;47059:59;:::i;:::-;47052:4;47045:5;47041:16;47034:85;46970:160;47188:2;47229:59;47284:3;47275:6;47264:9;47260:22;47229:59;:::i;:::-;47222:4;47215:5;47211:16;47204:85;47140:160;46530:777;;;;:::o;47313:97::-;47349:7;47389:14;47382:5;47378:26;47367:37;;47313:97;;;:::o;47416:120::-;47488:23;47505:5;47488:23;:::i;:::-;47481:5;47478:34;47468:62;;47526:1;47523;47516:12;47468:62;47416:120;:::o;47542:141::-;47598:5;47629:6;47623:13;47614:22;;47645:32;47671:5;47645:32;:::i;:::-;47542:141;;;;:::o;47689:122::-;47762:24;47780:5;47762:24;:::i;:::-;47755:5;47752:35;47742:63;;47801:1;47798;47791:12;47742:63;47689:122;:::o;47817:143::-;47874:5;47905:6;47899:13;47890:22;;47921:33;47948:5;47921:33;:::i;:::-;47817:143;;;;:::o;47987:782::-;48069:5;48113:4;48101:9;48096:3;48092:19;48088:30;48085:117;;;48121:79;;:::i;:::-;48085:117;48220:21;48236:4;48220:21;:::i;:::-;48211:30;;48302:1;48342:59;48397:3;48388:6;48377:9;48373:22;48342:59;:::i;:::-;48335:4;48328:5;48324:16;48317:85;48251:162;48477:2;48518:59;48573:3;48564:6;48553:9;48549:22;48518:59;:::i;:::-;48511:4;48504:5;48500:16;48493:85;48423:166;48649:2;48690:60;48746:3;48737:6;48726:9;48722:22;48690:60;:::i;:::-;48683:4;48676:5;48672:16;48665:86;48599:163;47987:782;;;;:::o;48803:869::-;48892:5;48936:6;48924:9;48919:3;48915:19;48911:32;48908:119;;;48946:79;;:::i;:::-;48908:119;49045:21;49061:4;49045:21;:::i;:::-;49036:30;;49127:1;49167:85;49248:3;49239:6;49228:9;49224:22;49167:85;:::i;:::-;49160:4;49153:5;49149:16;49142:111;49076:188;49329:2;49370:82;49448:3;49439:6;49428:9;49424:22;49370:82;:::i;:::-;49363:4;49356:5;49352:16;49345:108;49274:190;49529:3;49571:82;49649:3;49640:6;49629:9;49625:22;49571:82;:::i;:::-;49564:4;49557:5;49553:16;49546:108;49474:191;48803:869;;;;:::o;49708:823::-;49844:5;49869:110;49885:93;49971:6;49885:93;:::i;:::-;49869:110;:::i;:::-;49860:119;;49999:5;50028:6;50021:5;50014:21;50062:4;50055:5;50051:16;50044:23;;50115:6;50107;50103:19;50095:6;50091:32;50146:3;50138:6;50135:15;50132:122;;;50165:79;;:::i;:::-;50132:122;50280:6;50263:262;50297:6;50292:3;50289:15;50263:262;;;50374:3;50403:77;50476:3;50464:10;50403:77;:::i;:::-;50398:3;50391:90;50510:4;50505:3;50501:14;50494:21;;50341:184;50323:6;50318:3;50314:16;50307:23;;50263:262;;;50267:21;49850:681;;49708:823;;;;;:::o;50567:443::-;50678:5;50727:3;50720:4;50712:6;50708:17;50704:27;50694:122;;50735:79;;:::i;:::-;50694:122;50845:6;50839:13;50870:134;51000:3;50992:6;50985:4;50977:6;50973:17;50870:134;:::i;:::-;50861:143;;50684:326;50567:443;;;;:::o;51016:612::-;51140:6;51189:2;51177:9;51168:7;51164:23;51160:32;51157:119;;;51195:79;;:::i;:::-;51157:119;51336:1;51325:9;51321:17;51315:24;51366:18;51358:6;51355:30;51352:117;;;51388:79;;:::i;:::-;51352:117;51493:118;51603:7;51594:6;51583:9;51579:22;51493:118;:::i;:::-;51483:128;;51286:335;51016:612;;;;:::o;51634:255::-;51674:4;51694:20;51712:1;51694:20;:::i;:::-;51689:25;;51728:20;51746:1;51728:20;:::i;:::-;51723:25;;51772:1;51769;51765:9;51757:17;;51796:62;51790:4;51787:72;51784:98;;;51862:18;;:::i;:::-;51784:98;51634:255;;;;:::o;51895:204::-;51934:4;51954:19;51971:1;51954:19;:::i;:::-;51949:24;;51987:19;52004:1;51987:19;:::i;:::-;51982:24;;52030:1;52027;52023:9;52015:17;;52054:14;52048:4;52045:24;52042:50;;;52072:18;;:::i;:::-;52042:50;51895:204;;;;:::o;52105:410::-;52145:7;52168:20;52186:1;52168:20;:::i;:::-;52163:25;;52202:20;52220:1;52202:20;:::i;:::-;52197:25;;52257:1;52254;52250:9;52279:30;52297:11;52279:30;:::i;:::-;52268:41;;52458:1;52449:7;52445:15;52442:1;52439:22;52419:1;52412:9;52392:83;52369:139;;52488:18;;:::i;:::-;52369:139;52153:362;52105:410;;;;:::o;52521:180::-;52569:77;52566:1;52559:88;52666:4;52663:1;52656:15;52690:4;52687:1;52680:15;52707:185;52747:1;52764:20;52782:1;52764:20;:::i;:::-;52759:25;;52798:20;52816:1;52798:20;:::i;:::-;52793:25;;52837:1;52827:35;;52842:18;;:::i;:::-;52827:35;52884:1;52881;52877:9;52872:14;;52707:185;;;;:::o;52898:375::-;52937:3;52956:19;52973:1;52956:19;:::i;:::-;52951:24;;52989:19;53006:1;52989:19;:::i;:::-;52984:24;;53031:1;53028;53024:9;53017:16;;53229:1;53224:3;53220:11;53213:19;53209:1;53206;53202:9;53198:35;53181:1;53176:3;53172:11;53167:1;53164;53160:9;53153:17;53149:35;53133:110;53130:136;;;53246:18;;:::i;:::-;53130:136;52898:375;;;;:::o;53279:385::-;53318:1;53335:19;53352:1;53335:19;:::i;:::-;53330:24;;53368:19;53385:1;53368:19;:::i;:::-;53363:24;;53406:1;53396:35;;53411:18;;:::i;:::-;53396:35;53597:1;53594;53590:9;53587:1;53584:16;53503:66;53500:1;53497:73;53480:130;53477:156;;;53613:18;;:::i;:::-;53477:156;53656:1;53653;53648:10;53643:15;;53279:385;;;;:::o;53670:556::-;53709:7;53732:19;53749:1;53732:19;:::i;:::-;53727:24;;53765:19;53782:1;53765:19;:::i;:::-;53760:24;;53819:1;53816;53812:9;53841:29;53858:11;53841:29;:::i;:::-;53830:40;;53928:66;53925:1;53922:73;53918:1;53915;53911:9;53907:89;53904:115;;;53999:18;;:::i;:::-;53904:115;54169:1;54160:7;54155:16;54152:1;54149:23;54129:1;54122:9;54102:84;54079:140;;54199:18;;:::i;:::-;54079:140;53717:509;53670:556;;;;:::o;54232:175::-;54372:27;54368:1;54360:6;54356:14;54349:51;54232:175;:::o;54413:366::-;54555:3;54576:67;54640:2;54635:3;54576:67;:::i;:::-;54569:74;;54652:93;54741:3;54652:93;:::i;:::-;54770:2;54765:3;54761:12;54754:19;;54413:366;;;:::o;54785:419::-;54951:4;54989:2;54978:9;54974:18;54966:26;;55038:9;55032:4;55028:20;55024:1;55013:9;55009:17;55002:47;55066:131;55192:4;55066:131;:::i;:::-;55058:139;;54785:419;;;:::o;55210:180::-;55350:32;55346:1;55338:6;55334:14;55327:56;55210:180;:::o;55396:366::-;55538:3;55559:67;55623:2;55618:3;55559:67;:::i;:::-;55552:74;;55635:93;55724:3;55635:93;:::i;:::-;55753:2;55748:3;55744:12;55737:19;;55396:366;;;:::o;55768:419::-;55934:4;55972:2;55961:9;55957:18;55949:26;;56021:9;56015:4;56011:20;56007:1;55996:9;55992:17;55985:47;56049:131;56175:4;56049:131;:::i;:::-;56041:139;;55768:419;;;:::o;56193:109::-;56274:21;56289:5;56274:21;:::i;:::-;56269:3;56262:34;56193:109;;:::o;56308:210::-;56395:4;56433:2;56422:9;56418:18;56410:26;;56446:65;56508:1;56497:9;56493:17;56484:6;56446:65;:::i;:::-;56308:210;;;;:::o;56524:182::-;56664:34;56660:1;56652:6;56648:14;56641:58;56524:182;:::o;56712:366::-;56854:3;56875:67;56939:2;56934:3;56875:67;:::i;:::-;56868:74;;56951:93;57040:3;56951:93;:::i;:::-;57069:2;57064:3;57060:12;57053:19;;56712:366;;;:::o;57084:419::-;57250:4;57288:2;57277:9;57273:18;57265:26;;57337:9;57331:4;57327:20;57323:1;57312:9;57308:17;57301:47;57365:131;57491:4;57365:131;:::i;:::-;57357:139;;57084:419;;;:::o;57509:179::-;57649:31;57645:1;57637:6;57633:14;57626:55;57509:179;:::o;57694:366::-;57836:3;57857:67;57921:2;57916:3;57857:67;:::i;:::-;57850:74;;57933:93;58022:3;57933:93;:::i;:::-;58051:2;58046:3;58042:12;58035:19;;57694:366;;;:::o;58066:419::-;58232:4;58270:2;58259:9;58255:18;58247:26;;58319:9;58313:4;58309:20;58305:1;58294:9;58290:17;58283:47;58347:131;58473:4;58347:131;:::i;:::-;58339:139;;58066:419;;;:::o;58491:221::-;58631:34;58627:1;58619:6;58615:14;58608:58;58700:4;58695:2;58687:6;58683:15;58676:29;58491:221;:::o;58718:366::-;58860:3;58881:67;58945:2;58940:3;58881:67;:::i;:::-;58874:74;;58957:93;59046:3;58957:93;:::i;:::-;59075:2;59070:3;59066:12;59059:19;;58718:366;;;:::o;59090:419::-;59256:4;59294:2;59283:9;59279:18;59271:26;;59343:9;59337:4;59333:20;59329:1;59318:9;59314:17;59307:47;59371:131;59497:4;59371:131;:::i;:::-;59363:139;;59090:419;;;:::o;59515:118::-;59586:22;59602:5;59586:22;:::i;:::-;59579:5;59576:33;59566:61;;59623:1;59620;59613:12;59566:61;59515:118;:::o;59639:135::-;59683:5;59721:6;59708:20;59699:29;;59737:31;59762:5;59737:31;:::i;:::-;59639:135;;;;:::o;59780:325::-;59837:6;59886:2;59874:9;59865:7;59861:23;59857:32;59854:119;;;59892:79;;:::i;:::-;59854:119;60012:1;60037:51;60080:7;60071:6;60060:9;60056:22;60037:51;:::i;:::-;60027:61;;59983:115;59780:325;;;;:::o;60111:183::-;60149:3;60172:23;60189:5;60172:23;:::i;:::-;60163:32;;60217:18;60210:5;60207:29;60204:55;;60239:18;;:::i;:::-;60204:55;60286:1;60279:5;60275:13;60268:20;;60111:183;;;:::o;60300:205::-;60339:3;60358:19;60375:1;60358:19;:::i;:::-;60353:24;;60391:19;60408:1;60391:19;:::i;:::-;60386:24;;60433:1;60430;60426:9;60419:16;;60456:18;60451:3;60448:27;60445:53;;;60478:18;;:::i;:::-;60445:53;60300:205;;;;:::o;60511:181::-;60651:33;60647:1;60639:6;60635:14;60628:57;60511:181;:::o;60698:366::-;60840:3;60861:67;60925:2;60920:3;60861:67;:::i;:::-;60854:74;;60937:93;61026:3;60937:93;:::i;:::-;61055:2;61050:3;61046:12;61039:19;;60698:366;;;:::o;61070:419::-;61236:4;61274:2;61263:9;61259:18;61251:26;;61323:9;61317:4;61313:20;61309:1;61298:9;61294:17;61287:47;61351:131;61477:4;61351:131;:::i;:::-;61343:139;;61070:419;;;:::o;61495:220::-;61635:34;61631:1;61623:6;61619:14;61612:58;61704:3;61699:2;61691:6;61687:15;61680:28;61495:220;:::o;61721:366::-;61863:3;61884:67;61948:2;61943:3;61884:67;:::i;:::-;61877:74;;61960:93;62049:3;61960:93;:::i;:::-;62078:2;62073:3;62069:12;62062:19;;61721:366;;;:::o;62093:419::-;62259:4;62297:2;62286:9;62282:18;62274:26;;62346:9;62340:4;62336:20;62332:1;62321:9;62317:17;62310:47;62374:131;62500:4;62374:131;:::i;:::-;62366:139;;62093:419;;;:::o;62518:174::-;62658:26;62654:1;62646:6;62642:14;62635:50;62518:174;:::o;62698:366::-;62840:3;62861:67;62925:2;62920:3;62861:67;:::i;:::-;62854:74;;62937:93;63026:3;62937:93;:::i;:::-;63055:2;63050:3;63046:12;63039:19;;62698:366;;;:::o;63070:419::-;63236:4;63274:2;63263:9;63259:18;63251:26;;63323:9;63317:4;63313:20;63309:1;63298:9;63294:17;63287:47;63351:131;63477:4;63351:131;:::i;:::-;63343:139;;63070:419;;;:::o;63495:180::-;63635:32;63631:1;63623:6;63619:14;63612:56;63495:180;:::o;63681:366::-;63823:3;63844:67;63908:2;63903:3;63844:67;:::i;:::-;63837:74;;63920:93;64009:3;63920:93;:::i;:::-;64038:2;64033:3;64029:12;64022:19;;63681:366;;;:::o;64053:419::-;64219:4;64257:2;64246:9;64242:18;64234:26;;64306:9;64300:4;64296:20;64292:1;64281:9;64277:17;64270:47;64334:131;64460:4;64334:131;:::i;:::-;64326:139;;64053:419;;;:::o;64478:112::-;64561:22;64577:5;64561:22;:::i;:::-;64556:3;64549:35;64478:112;;:::o;64596:118::-;64683:24;64701:5;64683:24;:::i;:::-;64678:3;64671:37;64596:118;;:::o;64720:115::-;64805:23;64822:5;64805:23;:::i;:::-;64800:3;64793:36;64720:115;;:::o;64841:1088::-;65148:4;65186:3;65175:9;65171:19;65163:27;;65200:71;65268:1;65257:9;65253:17;65244:6;65200:71;:::i;:::-;65281:68;65345:2;65334:9;65330:18;65321:6;65281:68;:::i;:::-;65359:70;65425:2;65414:9;65410:18;65401:6;65359:70;:::i;:::-;65439:72;65507:2;65496:9;65492:18;65483:6;65439:72;:::i;:::-;65521:73;65589:3;65578:9;65574:19;65565:6;65521:73;:::i;:::-;65604:71;65670:3;65659:9;65655:19;65646:6;65604:71;:::i;:::-;65685:73;65753:3;65742:9;65738:19;65729:6;65685:73;:::i;:::-;65768;65836:3;65825:9;65821:19;65812:6;65768:73;:::i;:::-;65851:71;65917:3;65906:9;65902:19;65893:6;65851:71;:::i;:::-;64841:1088;;;;;;;;;;;;:::o;65935:175::-;66075:27;66071:1;66063:6;66059:14;66052:51;65935:175;:::o;66116:366::-;66258:3;66279:67;66343:2;66338:3;66279:67;:::i;:::-;66272:74;;66355:93;66444:3;66355:93;:::i;:::-;66473:2;66468:3;66464:12;66457:19;;66116:366;;;:::o;66488:419::-;66654:4;66692:2;66681:9;66677:18;66669:26;;66741:9;66735:4;66731:20;66727:1;66716:9;66712:17;66705:47;66769:131;66895:4;66769:131;:::i;:::-;66761:139;;66488:419;;;:::o;67099:118::-;67170:22;67186:5;67170:22;:::i;:::-;67163:5;67160:33;67150:61;;67207:1;67204;67197:12;67150:61;67099:118;:::o;67223:182::-;67266:11;67315:3;67302:17;67328:31;67353:5;67328:31;:::i;:::-;67393:5;67369:29;;67278:127;67223:182;;;:::o;67411:92::-;67443:8;67490:5;67487:1;67483:13;67462:34;;67411:92;;;:::o;67509:246::-;67567:6;67596:22;67639;67652:8;67639:22;:::i;:::-;67627:34;;67694:4;67690:9;67683:5;67679:21;67670:30;;67743:4;67733:8;67729:19;67722:5;67719:30;67709:40;;67574:181;67509:246;;;;:::o;67761:60::-;67789:3;67810:5;67803:12;;67761:60;;;:::o;67827:134::-;67873:9;67906:49;67922:32;67931:22;67947:5;67931:22;:::i;:::-;67922:32;:::i;:::-;67906:49;:::i;:::-;67893:62;;67827:134;;;:::o;67967:73::-;68008:3;68029:5;68022:12;;67967:73;;;:::o;68046:253::-;68153:35;68180:7;68153:35;:::i;:::-;68210:82;68252:39;68274:16;68252:39;:::i;:::-;68245:4;68239:11;68210:82;:::i;:::-;68204:4;68197:96;68119:180;68046:253;;:::o;68305:94::-;68338:8;68386:5;68382:2;68378:14;68357:35;;68305:94;;;:::o;68405:268::-;68464:6;68493:42;68556:23;68570:8;68556:23;:::i;:::-;68544:35;;68612:4;68608:9;68601:5;68597:21;68588:30;;68661:4;68651:8;68647:19;68640:5;68637:30;68627:40;;68471:202;68405:268;;;;:::o;68679:255::-;68787:35;68814:7;68787:35;:::i;:::-;68844:83;68887:39;68909:16;68887:39;:::i;:::-;68880:4;68874:11;68844:83;:::i;:::-;68838:4;68831:97;68753:181;68679:255;;:::o;68940:96::-;68974:8;69023:5;69018:3;69014:15;68993:36;;68940:96;;;:::o;69042:289::-;69101:6;69130:62;69213:24;69228:8;69213:24;:::i;:::-;69201:36;;69270:4;69266:9;69259:5;69255:21;69246:30;;69319:4;69309:8;69305:19;69298:5;69295:30;69285:40;;69108:223;69042:289;;;;:::o;69337:255::-;69445:35;69472:7;69445:35;:::i;:::-;69502:83;69545:39;69567:16;69545:39;:::i;:::-;69538:4;69532:11;69502:83;:::i;:::-;69496:4;69489:97;69411:181;69337:255;;:::o;69598:1140::-;69784:1;69778:4;69774:12;69830:1;69823:5;69819:13;69880:12;69923:40;69949:13;69923:40;:::i;:::-;69906:57;;69977:75;70038:13;70026:10;69977:75;:::i;:::-;69741:322;;;70116:1;70110:4;70106:12;70162:2;70155:5;70151:14;70213:12;70256:40;70282:13;70256:40;:::i;:::-;70239:57;;70310:76;70372:13;70360:10;70310:76;:::i;:::-;70073:324;;;70450:1;70444:4;70440:12;70496:2;70489:5;70485:14;70547:12;70590:40;70616:13;70590:40;:::i;:::-;70573:57;;70644:76;70706:13;70694:10;70644:76;:::i;:::-;70407:324;;;69598:1140;;:::o;70744:277::-;70891:124;71007:7;71001:4;70891:124;:::i;:::-;70744:277;;:::o;71027:194::-;71067:4;71087:20;71105:1;71087:20;:::i;:::-;71082:25;;71121:20;71139:1;71121:20;:::i;:::-;71116:25;;71165:1;71162;71158:9;71150:17;;71189:1;71183:4;71180:11;71177:37;;;71194:18;;:::i;:::-;71177:37;71027:194;;;;:::o;71227:372::-;71266:4;71286:19;71303:1;71286:19;:::i;:::-;71281:24;;71319:19;71336:1;71319:19;:::i;:::-;71314:24;;71362:1;71359;71355:9;71347:17;;71556:1;71550:4;71546:12;71542:1;71539;71535:9;71531:28;71514:1;71508:4;71504:12;71499:1;71496;71492:9;71485:17;71481:36;71465:104;71462:130;;;71572:18;;:::i;:::-;71462:130;71227:372;;;;:::o;71605:174::-;71745:26;71741:1;71733:6;71729:14;71722:50;71605:174;:::o;71785:366::-;71927:3;71948:67;72012:2;72007:3;71948:67;:::i;:::-;71941:74;;72024:93;72113:3;72024:93;:::i;:::-;72142:2;72137:3;72133:12;72126:19;;71785:366;;;:::o;72157:419::-;72323:4;72361:2;72350:9;72346:18;72338:26;;72410:9;72404:4;72400:20;72396:1;72385:9;72381:17;72374:47;72438:131;72564:4;72438:131;:::i;:::-;72430:139;;72157:419;;;:::o

Swarm Source

ipfs://9d9097435957bdb616c0127cdb11e2fbbc992276bf7cd4a5df493556812b0918

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.