From 584f3986f90c73f13c0b2b69cc96385334c86d86 Mon Sep 17 00:00:00 2001 From: clabby Date: Tue, 7 May 2024 17:54:35 -0400 Subject: [PATCH] Separate snapshot gen --- .../contracts-bedrock/scripts/checks/check-snapshots.sh | 2 -- .../kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol | 4 ++-- .../proofs/utils/DeploymentSummaryFaultProofsCode.sol | 6 +++--- packages/contracts-bedrock/test/kontrol/scripts/common.sh | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh index bf050170162c..1aedf049fabf 100755 --- a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh +++ b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh @@ -4,8 +4,6 @@ set -euo pipefail # Generate the snapshots pnpm snapshots -pnpm kontrol-summary -pnpm kontrol-summary-fp # Check if the generated snapshots are different from the committed snapshots if git diff --exit-code snapshots > /dev/null; then diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index c86ef76d4a44..70c39c703f6e 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -26,7 +26,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1StandardBridgeAddress = 0x04c50B398Cd4182428E79f7186b7C919cF17e86F; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant mipsAddress = 0x4edC7dF83e441Cc0399642Cef7Bd9437f021cE46; - address internal constant optimismPortal2Address = 0xa83d526FF480d21208f1a933b384315FD332b9b7; + address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; @@ -604,7 +604,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"000000000000000000000000000000000000000000000000000000000000000d"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000a83d526ff480d21208f1a933b384315fd332b9b7"; + value = hex"000000000000000000000000fcbb237388caf5b08175c9927a37ab6450acd535"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index ddd98ba892b3..f4b0b4083608 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -39,7 +39,7 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortal2Code = - hex"6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e42565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e94565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614eb1565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f8d565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a919061501c565b34801561040b57600080fd5b506102fc611303565b34801561042057600080fd5b506101d561042f36600461502f565b611396565b34801561044057600080fd5b506101d561044f366004614e94565b611c27565b34801561046057600080fd5b506101d561046f366004615066565b611ce2565b34801561048057600080fd5b506101d561048f366004615083565b611d9c565b3480156104a057600080fd5b506101d56104af3660046150c0565b611de8565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000661039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f8d565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615132565b61209d565b34801561057057600080fd5b5061020961057f36600461514f565b6120bc565b34801561059057600080fd5b506105f661059f36600461502f565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c61039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d36600461517f565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a8835161209d565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151fe565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df919061501c565b60405180910390a450506108f3828261211d565b50505050505050565b610904611303565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123f4565b9050610a008183611396565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612441565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615263565b905090565b610bfa611303565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615280565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152cd565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152e6565b61249f565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123f4565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061537b565b6002811115610fcf57610fcf61534c565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61539c565b8b604001356124de565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615420565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff1660000361155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115e08273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d3919061543d565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff16116116af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f000000000000000000000000000000000000000000000000000000000000000c836020015167ffffffffffffffff16426116ea9190615489565b11611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e8919061537b565b60028111156117f9576117f961534c565b14611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166119108373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190791906154a0565b63ffffffff1690565b63ffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000006611ae08373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115af573d6000803e3d6000fd5b611af49067ffffffffffffffff1642615489565b11611b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c2f610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cea610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611da4611303565b15611ddb576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de581336108fc565b50565b600054610100900460ff1615808015611e085750600054600160ff909116105b80611e225750303b158015611e22575060005460ff166001145b611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f0c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100868416021790556032541661202c576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b612034612502565b8015611c2057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006120aa8260106154bd565b6120b6906152086154ed565b92915050565b603c60205281600052604060002081815481106120d857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612153907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615489565b9050600061215f612615565b90506000816020015160ff16826000015163ffffffff166121809190615548565b905082156122b7576001546000906121b7908390700100000000000000000000000000000000900467ffffffffffffffff166155b0565b90506000836040015160ff16836121ce9190615624565b6001546121ee9084906fffffffffffffffffffffffffffffffff16615624565b6121f89190615548565b600154909150600090612249906122229084906fffffffffffffffffffffffffffffffff166156e0565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126d6565b905060018611156122785761227561222282876040015160ff1660018a6122709190615489565b6126f5565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122ea908490700100000000000000000000000000000000900467ffffffffffffffff166154ed565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612377576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123a3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615754565b905060006123b548633b9aca0061274a565b6123bf9083615791565b905060005a6123ce9088615489565b9050808211156123ea576123ea6123e58284615489565b612761565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976124249790969591016157a5565b604051602081830303815290604052805190602001209050919050565b600080600061245186600061278f565b905080612487576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60008160000151826020015183604001518460600151604051602001612424949392919093845260208401929092526040830152606082015260800190565b6000806124ea866127ad565b90506124f8818686866127df565b9695505050505050565b600054610100900460ff16612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d9a5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156126b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615812565b60006126eb6126e5858561280f565b8361281f565b90505b9392505050565b6000670de0b6b3a764000061273661270d8583615548565b61271f90670de0b6b3a76400006155b0565b61273185670de0b6b3a7640000615624565b61282e565b6127409086615624565b6126eb9190615548565b60008183101561275a57816126ee565b5090919050565b6000805a90505b825a6127749083615489565b101561278a57612783826158ce565b9150612768565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b606081805190602001206040516020016127c991815260200190565b6040516020818303038152906040529050919050565b6000612806846127f087868661285f565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561275a57816126ee565b600081831261275a57816126ee565b60006126ee670de0b6b3a764000083612846866132dd565b6128509190615624565b61285a9190615548565b613521565b606060008451116128cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128d784613760565b905060006128e48661384c565b90506000846040516020016128fb91815260200190565b60405160208183030381529060405290506000805b845181101561325457600085828151811061292d5761292d615906565b6020026020010151905084518311156129c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a815780518051602091820120604051612a16926129f092910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bd8565b805151602011612b375780518051602091820120604051612aab926129f092910190815260200190565b612a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612be460106001615935565b81602001515103612dc05784518303612d5857612c1e8160200151601081518110612c1157612c11615906565b60200260200101516138af565b96506000875111612cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612cbf9190615489565b8214612d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126ee565b6000858481518110612d6c57612d6c615906565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d9757612d97615906565b60200260200101519050612daa81613a0f565b9550612db7600186615935565b94505050613241565b6002816020015151036131b9576000612dd882613a34565b9050600081600081518110612def57612def615906565b016020015160f81c90506000612e0660028361594d565b612e1190600261596f565b90506000612e22848360ff16613a58565b90506000612e308a89613a58565b90506000612e3e8383613a8e565b905080835114612ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612ee5575060ff85166003145b156130d45780825114612f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f948760200151600181518110612c1157612c11615906565b9c5060008d5111613027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c516130359190615489565b88146130c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126ee565b60ff851615806130e7575060ff85166001145b1561312657613113876020015160018151811061310657613106615906565b6020026020010151613a0f565b995061311f818a615935565b98506131ae565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613241565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061324c816158ce565b915050612910565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b6000808213613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061335584613b42565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361355257506000919050565b680755bf798b4a1bf1e582126135c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561377e5761377e614c65565b6040519080825280602002602001820160405280156137c357816020015b604080518082019091526060808252602082015281526020019060019003908161379c5790505b50915060005b818110156138455760405180604001604052808583815181106137ee576137ee615906565b6020026020010151815260200161381d86848151811061381057613810615906565b6020026020010151613c18565b81525083828151811061383257613832615906565b60209081029190910101526001016137c9565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156138a4578060011b82018184015160001a8060041c8253600f811660018301535050600101613876565b509295945050505050565b606060008060006138bf85613c2b565b9194509250905060008160018111156138da576138da61534c565b14613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139718284615935565b855114613a00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b61280685602001518484614698565b60606020826000015110613a2b57613a26826138af565b6120b6565b6120b68261472c565b60606120b6613a538360200151600081518110612c1157612c11615906565b61384c565b606082518210613a7757506040805160208101909152600081526120b6565b6126ee8383848651613a899190615489565b614742565b6000808251845110613aa1578251613aa4565b83515b90505b8082108015613b2b5750828281518110613ac357613ac3615906565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613b0257613b02615906565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b3b57816001019150613aa7565b5092915050565b6000808211613bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60606120b6613c268361491a565b614a03565b600080600080846000015111613ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613d0e576000600160009450945094505050614691565b60b78111613f1c576000613d23608083615489565b905080876000015111613dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e5757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614691915050565b60bf811161426a576000613f3160b783615489565b905080876000015111613fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c6037811161418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b6141988184615935565b89511161424d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b614258836001615935565b97509550600094506146919350505050565b60f7811161434b57600061427f60c083615489565b90508087600001511161433a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614691915050565b600061435860f783615489565b905080876000015111614413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c603781116145b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145bf8184615935565b895111614674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b61467f836001615935565b97509550600194506146919350505050565b9193909250565b60608167ffffffffffffffff8111156146b3576146b3614c65565b6040519080825280601f01601f1916602001820160405280156146dd576020820181803683370190505b50905081156126ee5760006146f28486615935565b90506020820160005b848110156147135782810151828201526020016146fb565b84811115614722576000858301525b5050509392505050565b60606120b6826020015160008460000151614698565b60608182601f0110156147b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b82828401101561481d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561488a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156148a95760405191506000825260208201604052614911565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148e25780518352602092830192016148ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b60606000806000614a1385613c2b565b919450925090506001816001811115614a2e57614a2e61534c565b14614abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614ac78385615935565b14614b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b6b5790505093506000835b8651811015614c5957600080614bde6040518060400160405280858c60000151614bc29190615489565b8152602001858c60200151614bd79190615935565b9052613c2b565b509150915060405180604001604052808383614bfa9190615935565b8152602001848b60200151614c0f9190615935565b815250888581518110614c2457614c24615906565b6020908102919091010152614c3a600185615935565b9350614c468183615935565b614c509084615935565b92505050614b98565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cdb57614cdb614c65565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611de557600080fd5b600082601f830112614d1657600080fd5b813567ffffffffffffffff811115614d3057614d30614c65565b614d6160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c94565b818152846020838601011115614d7657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614da557600080fd5b60405160c0810167ffffffffffffffff8282108183111715614dc957614dc9614c65565b816040528293508435835260208501359150614de482614ce3565b81602084015260408501359150614dfa82614ce3565b816040840152606085013560608401526080850135608084015260a0850135915080821115614e2857600080fd5b50614e3585828601614d05565b60a0830152505092915050565b60008060408385031215614e5557600080fd5b823567ffffffffffffffff811115614e6c57600080fd5b614e7885828601614d93565b9250506020830135614e8981614ce3565b809150509250929050565b600060208284031215614ea657600080fd5b81356126ee81614ce3565b600080600080600085870360e0811215614eca57600080fd5b863567ffffffffffffffff80821115614ee257600080fd5b614eee8a838b01614d93565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614f2757600080fd5b60408901955060c0890135925080831115614f4157600080fd5b828901925089601f840112614f5557600080fd5b8235915080821115614f6657600080fd5b508860208260051b8401011115614f7c57600080fd5b959894975092955050506020019190565b600060208284031215614f9f57600080fd5b5035919050565b60005b83811015614fc1578181015183820152602001614fa9565b83811115610b545750506000910152565b60008151808452614fea816020860160208601614fa6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126ee6020830184614fd2565b6000806040838503121561504257600080fd5b823591506020830135614e8981614ce3565b63ffffffff81168114611de557600080fd5b60006020828403121561507857600080fd5b81356126ee81615054565b60006020828403121561509557600080fd5b813567ffffffffffffffff8111156150ac57600080fd5b6150b884828501614d93565b949350505050565b600080600080608085870312156150d657600080fd5b84356150e181614ce3565b935060208501356150f181614ce3565b9250604085013561510181614ce3565b9150606085013561511181615054565b939692955090935050565b67ffffffffffffffff81168114611de557600080fd5b60006020828403121561514457600080fd5b81356126ee8161511c565b6000806040838503121561516257600080fd5b50508035926020909101359150565b8015158114611de557600080fd5b600080600080600060a0868803121561519757600080fd5b85356151a281614ce3565b94506020860135935060408601356151b98161511c565b925060608601356151c981615171565b9150608086013567ffffffffffffffff8111156151e557600080fd5b6151f188828901614d05565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615252816049850160208701614fa6565b919091016049019695505050505050565b60006020828403121561527557600080fd5b81516126ee81614ce3565b60008060006060848603121561529557600080fd5b83516152a081615054565b60208501519093506152b18161511c565b60408501519092506152c281614ce3565b809150509250925092565b6000602082840312156152df57600080fd5b5051919050565b6000608082840312156152f857600080fd5b6040516080810181811067ffffffffffffffff8211171561531b5761531b614c65565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561538d57600080fd5b8151600381106126ee57600080fd5b600067ffffffffffffffff808411156153b7576153b7614c65565b8360051b60206153c8818301614c94565b8681529185019181810190368411156153e057600080fd5b865b84811015615414578035868111156153fa5760008081fd5b61540636828b01614d05565b8452509183019183016153e2565b50979650505050505050565b60006020828403121561543257600080fd5b81516126ee81615171565b60006020828403121561544f57600080fd5b81516126ee8161511c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561549b5761549b61545a565b500390565b6000602082840312156154b257600080fd5b81516126ee81615054565b600067ffffffffffffffff808316818516818304811182151516156154e4576154e461545a565b02949350505050565b600067ffffffffffffffff8083168185168083038211156155105761551061545a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261555757615557615519565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156155ab576155ab61545a565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155ea576155ea61545a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561561e5761561e61545a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156655761566561545a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156a0576156a061545a565b600087129250878205871284841616156156bc576156bc61545a565b878505871281841616156156d2576156d261545a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561571a5761571a61545a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561574e5761574e61545a565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561578c5761578c61545a565b500290565b6000826157a0576157a0615519565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157f060c0830184614fd2565b98975050505050505050565b805160ff8116811461580d57600080fd5b919050565b600060c0828403121561582457600080fd5b60405160c0810181811067ffffffffffffffff8211171561584757615847614c65565b604052825161585581615054565b8152615863602084016157fc565b6020820152615874604084016157fc565b6040820152606083015161588781615054565b6060820152608083015161589a81615054565b608082015260a08301516fffffffffffffffffffffffffffffffff811681146158c257600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158ff576158ff61545a565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156159485761594861545a565b500190565b600060ff83168061596057615960615519565b8060ff84160691505092915050565b600060ff821660ff8416808210156159895761598961545a565b9003939250505056fea164736f6c634300080f000a"; + hex"6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b23660046146f9565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e736600461474b565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614768565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614844565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600681526020017f332e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161022a91906148d3565b34801561040b57600080fd5b506102fc611303565b34801561042057600080fd5b506101d561042f3660046148e6565b611396565b34801561044057600080fd5b506101d561044f36600461474b565b611c27565b34801561046057600080fd5b506101d561046f36600461491d565b611d0a565b34801561048057600080fd5b506101d561048f36600461493a565b611df6565b3480156104a057600080fd5b506101d56104af366004614977565b611e42565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000661039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614844565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f3660046149e9565b6120f7565b34801561057057600080fd5b5061020961057f366004614a06565b612116565b34801561059057600080fd5b506105f661059f3660046148e6565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c61039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004614a36565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a883516120f7565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f959493929190614ab5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df91906148d3565b60405180910390a450506108f38282612177565b50505050505050565b610904611303565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f48361244e565b9050610a008183611396565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa29392919061249b565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614b1a565b905090565b610bfa611303565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614b37565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190614b84565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead36889003880188614b9d565b6124f9565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b8961244e565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe9190614c32565b6002811115610fcf57610fcf614c03565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b614c53565b8b60400135612538565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614cd7565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff1660000361155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115e08273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d39190614cf4565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff16116116af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f000000000000000000000000000000000000000000000000000000000000000c836020015167ffffffffffffffff16426116ea9190614d40565b11611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e89190614c32565b60028111156117f9576117f9614c03565b14611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166119108373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190614d57565b63ffffffff1690565b63ffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000006611ae08373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115af573d6000803e3d6000fd5b611af49067ffffffffffffffff1642614d40565b11611b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c2f610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000818152603a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b611d12610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d76576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff83167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090911681176401000000004267ffffffffffffffff90811682029290921793849055604051930416917f049fe9dd413cdf037cce27011cc1790c753118272f3630e6e8bdfa5e8208176090600090a350565b565b611dfe611303565b15611e35576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e3f81336108fc565b50565b600054610100900460ff1615808015611e625750600054600160ff909116105b80611e7c5750303b158015611e7c575060005460ff166001145b611f08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416612086576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b61208e61255c565b8015611c2057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000612104826010614d74565b61211090615208614da4565b92915050565b603c602052816000526040600020818154811061213257600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6001546000906121ad907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614d40565b905060006121b961266f565b90506000816020015160ff16826000015163ffffffff166121da9190614dff565b9050821561231157600154600090612211908390700100000000000000000000000000000000900467ffffffffffffffff16614e67565b90506000836040015160ff16836122289190614edb565b6001546122489084906fffffffffffffffffffffffffffffffff16614edb565b6122529190614dff565b6001549091506000906122a39061227c9084906fffffffffffffffffffffffffffffffff16614f97565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612730565b905060018611156122d2576122cf61227c82876040015160ff1660018a6122ca9190614d40565b61274f565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612344908490700100000000000000000000000000000000900467ffffffffffffffff16614da4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123d1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123fd906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661500b565b9050600061240f48633b9aca006127a4565b6124199083615048565b905060005a6124289088614d40565b9050808211156124445761244461243f8284614d40565b6127bb565b5050505050505050565b80516020808301516040808501516060860151608087015160a0880151935160009761247e97909695910161505c565b604051602081830303815290604052805190602001209050919050565b60008060006124ab8660006127e9565b9050806124e1576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b6000816000015182602001518360400151846060015160405160200161247e949392919093845260208401929092526040830152606082015260800190565b60008061254486612807565b905061255281868686612839565b9695505050505050565b600054610100900460ff166125f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611df45760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906150c9565b600061274561273f8585612869565b83612879565b90505b9392505050565b6000670de0b6b3a76400006127906127678583614dff565b61277990670de0b6b3a7640000614e67565b61278b85670de0b6b3a7640000614edb565b612888565b61279a9086614edb565b6127459190614dff565b6000818310156127b45781612748565b5090919050565b6000805a90505b825a6127ce9083614d40565b10156127e4576127dd82615185565b91506127c2565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161282391815260200190565b6040516020818303038152906040529050919050565b60006128608461284a8786866128b9565b8051602091820120825192909101919091201490565b95945050505050565b6000818312156127b45781612748565b60008183126127b45781612748565b6000612748670de0b6b3a7640000836128a086613337565b6128aa9190614edb565b6128b49190614dff565b61357b565b60606000845111612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b6000612931846137ba565b9050600061293e866138a6565b905060008460405160200161295591815260200190565b60405160208183030381529060405290506000805b84518110156132ae576000858281518110612987576129876151bd565b602002602001015190508451831115612a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612adb5780518051602091820120604051612a7092612a4a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612ad6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612c32565b805151602011612b915780518051602091820120604051612b0592612a4a92910190815260200190565b612ad6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612c3e601060016151ec565b81602001515103612e1a5784518303612db257612c788160200151601081518110612c6b57612c6b6151bd565b6020026020010151613909565b96506000875111612d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612d199190614d40565b8214612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b505050505050612748565b6000858481518110612dc657612dc66151bd565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612df157612df16151bd565b60200260200101519050612e04816139bd565b9550612e116001866151ec565b9450505061329b565b600281602001515103613213576000612e32826139e2565b9050600081600081518110612e4957612e496151bd565b016020015160f81c90506000612e60600283615204565b612e6b906002615226565b90506000612e7c848360ff16613a06565b90506000612e8a8a89613a06565b90506000612e988383613a3c565b905080835114612f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612f3f575060ff85166003145b1561312e5780825114612fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612fee8760200151600181518110612c6b57612c6b6151bd565b9c5060008d5111613081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c5161308f9190614d40565b881461311d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b505050505050505050505050612748565b60ff85161580613141575060ff85166001145b156131805761316d8760200151600181518110613160576131606151bd565b60200260200101516139bd565b9950613179818a6151ec565b9850613208565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b50505050505061329b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b50806132a681615185565b91505061296a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b60008082136133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b600060606133af84613af0565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136135ac57506000919050565b680755bf798b4a1bf1e5821261361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156137d8576137d861451c565b60405190808252806020026020018201604052801561381d57816020015b60408051808201909152606080825260208201528152602001906001900390816137f65790505b50915060005b8181101561389f576040518060400160405280858381518110613848576138486151bd565b6020026020010151815260200161387786848151811061386a5761386a6151bd565b6020026020010151613bc6565b81525083828151811061388c5761388c6151bd565b6020908102919091010152600101613823565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156138fe578060011b82018184015160001a8060041c8253600f8116600183015350506001016138d0565b509295945050505050565b6060600080600061391985613bd9565b91945092509050600081600181111561393457613934614c03565b1461396b576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61397582846151ec565b8551146139ae576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61286085602001518484614077565b606060208260000151106139d9576139d482613909565b612110565b6121108261410b565b6060612110613a018360200151600081518110612c6b57612c6b6151bd565b6138a6565b606082518210613a255750604080516020810190915260008152612110565b6127488383848651613a379190614d40565b614121565b6000808251845110613a4f578251613a52565b83515b90505b8082108015613ad95750828281518110613a7157613a716151bd565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ab057613ab06151bd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613ae957816001019150613a55565b5092915050565b6000808211613b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612110613bd4836142f9565b614366565b60008060008360000151600003613c1c576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111613c41576000600160009450945094505050614070565b60b78111613d57576000613c56608083614d40565b905080876000015111613c95576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015613d0d57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613d44576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614070915050565b60bf8111613eb5576000613d6c60b783614d40565b905080876000015111613dab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613e0d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613e55576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e5f81846151ec565b895111613e98576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ea38360016151ec565b97509550600094506140709350505050565b60f78111613f1a576000613eca60c083614d40565b905080876000015111613f09576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614070915050565b6000613f2760f783614d40565b905080876000015111613f66576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613fc8576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614010576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61401a81846151ec565b895111614053576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61405e8360016151ec565b97509550600194506140709350505050565b9193909250565b60608167ffffffffffffffff8111156140925761409261451c565b6040519080825280601f01601f1916602001820160405280156140bc576020820181803683370190505b50905081156127485760006140d184866151ec565b90506020820160005b848110156140f25782810151828201526020016140da565b84811115614101576000858301525b5050509392505050565b6060612110826020015160008460000151614077565b60608182601f011015614190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156141fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b81830184511015614269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561428857604051915060008252602082016040526142f0565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156142c15780518352602092830192016142a9565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201528151600003614348576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061437685613bd9565b91945092509050600181600181111561439157614391614c03565b146143c8576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516143d483856151ec565b1461440b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816144225790505093506000835b8651811015614510576000806144956040518060400160405280858c600001516144799190614d40565b8152602001858c6020015161448e91906151ec565b9052613bd9565b5091509150604051806040016040528083836144b191906151ec565b8152602001848b602001516144c691906151ec565b8152508885815181106144db576144db6151bd565b60209081029190910101526144f16001856151ec565b93506144fd81836151ec565b61450790846151ec565b9250505061444f565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156145925761459261451c565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611e3f57600080fd5b600082601f8301126145cd57600080fd5b813567ffffffffffffffff8111156145e7576145e761451c565b61461860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161454b565b81815284602083860101111561462d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561465c57600080fd5b60405160c0810167ffffffffffffffff82821081831117156146805761468061451c565b81604052829350843583526020850135915061469b8261459a565b816020840152604085013591506146b18261459a565b816040840152606085013560608401526080850135608084015260a08501359150808211156146df57600080fd5b506146ec858286016145bc565b60a0830152505092915050565b6000806040838503121561470c57600080fd5b823567ffffffffffffffff81111561472357600080fd5b61472f8582860161464a565b92505060208301356147408161459a565b809150509250929050565b60006020828403121561475d57600080fd5b81356127488161459a565b600080600080600085870360e081121561478157600080fd5b863567ffffffffffffffff8082111561479957600080fd5b6147a58a838b0161464a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156147de57600080fd5b60408901955060c08901359250808311156147f857600080fd5b828901925089601f84011261480c57600080fd5b823591508082111561481d57600080fd5b508860208260051b840101111561483357600080fd5b959894975092955050506020019190565b60006020828403121561485657600080fd5b5035919050565b60005b83811015614878578181015183820152602001614860565b83811115610b545750506000910152565b600081518084526148a181602086016020860161485d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127486020830184614889565b600080604083850312156148f957600080fd5b8235915060208301356147408161459a565b63ffffffff81168114611e3f57600080fd5b60006020828403121561492f57600080fd5b81356127488161490b565b60006020828403121561494c57600080fd5b813567ffffffffffffffff81111561496357600080fd5b61496f8482850161464a565b949350505050565b6000806000806080858703121561498d57600080fd5b84356149988161459a565b935060208501356149a88161459a565b925060408501356149b88161459a565b915060608501356149c88161490b565b939692955090935050565b67ffffffffffffffff81168114611e3f57600080fd5b6000602082840312156149fb57600080fd5b8135612748816149d3565b60008060408385031215614a1957600080fd5b50508035926020909101359150565b8015158114611e3f57600080fd5b600080600080600060a08688031215614a4e57600080fd5b8535614a598161459a565b9450602086013593506040860135614a70816149d3565b92506060860135614a8081614a28565b9150608086013567ffffffffffffffff811115614a9c57600080fd5b614aa8888289016145bc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614b0981604985016020870161485d565b919091016049019695505050505050565b600060208284031215614b2c57600080fd5b81516127488161459a565b600080600060608486031215614b4c57600080fd5b8351614b578161490b565b6020850151909350614b68816149d3565b6040850151909250614b798161459a565b809150509250925092565b600060208284031215614b9657600080fd5b5051919050565b600060808284031215614baf57600080fd5b6040516080810181811067ffffffffffffffff82111715614bd257614bd261451c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215614c4457600080fd5b81516003811061274857600080fd5b600067ffffffffffffffff80841115614c6e57614c6e61451c565b8360051b6020614c7f81830161454b565b868152918501918181019036841115614c9757600080fd5b865b84811015614ccb57803586811115614cb15760008081fd5b614cbd36828b016145bc565b845250918301918301614c99565b50979650505050505050565b600060208284031215614ce957600080fd5b815161274881614a28565b600060208284031215614d0657600080fd5b8151612748816149d3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614d5257614d52614d11565b500390565b600060208284031215614d6957600080fd5b81516127488161490b565b600067ffffffffffffffff80831681851681830481118215151615614d9b57614d9b614d11565b02949350505050565b600067ffffffffffffffff808316818516808303821115614dc757614dc7614d11565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e0e57614e0e614dd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614e6257614e62614d11565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614ea157614ea1614d11565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614ed557614ed5614d11565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614f1c57614f1c614d11565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614f5757614f57614d11565b60008712925087820587128484161615614f7357614f73614d11565b87850587128184161615614f8957614f89614d11565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614fd157614fd1614d11565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561500557615005614d11565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561504357615043614d11565b500290565b60008261505757615057614dd0565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526150a760c0830184614889565b98975050505050505050565b805160ff811681146150c457600080fd5b919050565b600060c082840312156150db57600080fd5b60405160c0810181811067ffffffffffffffff821117156150fe576150fe61451c565b604052825161510c8161490b565b815261511a602084016150b3565b602082015261512b604084016150b3565b6040820152606083015161513e8161490b565b606082015260808301516151518161490b565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461517957600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151b6576151b6614d11565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156151ff576151ff614d11565b500190565b600060ff83168061521757615217614dd0565b8060ff84160691505092915050565b600060ff821660ff84168082101561524057615240614d11565b9003939250505056fea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = @@ -59,7 +59,7 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102d15760003560e01c80638980e0cc11610179578063cf09e0d0116100d6578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610a76578063fa315aa914610a9a578063fe2bbeb214610acd57600080fd5b8063ec5e6308146109e3578063eff0f59214610a16578063f8f43ff614610a5657600080fd5b8063d6ae3cd5116100bb578063d6ae3cd51461095d578063d8cc1a3c14610990578063dabd396d146109b057600080fd5b8063cf09e0d01461090f578063d5d44d801461093057600080fd5b8063bcef3b551161012d578063c395e1ca11610112578063c395e1ca14610852578063c55cd0c714610872578063c6f0308c1461088557600080fd5b8063bcef3b55146107f2578063bd8da9561461083257600080fd5b80638d450a951161015e5780638d450a95146106b2578063a445ece6146106e5578063bbdc02db146107b157600080fd5b80638980e0cc1461065d5780638b85902b1461067257600080fd5b806354fd4d501161023257806360e27464116101e65780636b6716c0116101c05780636b6716c01461060d57806370872aa5146106405780638129fc1c1461065557600080fd5b806360e274641461059a578063632247ea146105ba5780636361506d146105cd57600080fd5b80635a5fa2d9116102175780635a5fa2d9146105325780635c0cba3314610552578063609d33341461058557600080fd5b806354fd4d50146104ac57806357da950e1461050257600080fd5b80632ad69aeb1161028957806337b1b2291161026e57806337b1b229146103e55780633a768463146104465780633fc8cef31461047957600080fd5b80632ad69aeb146103b257806335fef567146103d257600080fd5b8063200d2ed2116102ba578063200d2ed21461034357806325fc2ace1461037e5780632810e1d61461039d57600080fd5b806303c2924d146102d657806319effeb4146102f8575b600080fd5b3480156102e257600080fd5b506102f66102f136600461457a565b610afd565b005b34801561030457600080fd5b506000546103259068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561034f57600080fd5b5060005461037190700100000000000000000000000000000000900460ff1681565b60405161033a91906145cb565b34801561038a57600080fd5b506007545b60405190815260200161033a565b3480156103a957600080fd5b506103716110f6565b3480156103be57600080fd5b5061038f6103cd36600461457a565b61139b565b6102f66103e036600461457a565b6113cc565b3480156103f157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b34801561045257600080fd5b507f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce46610421565b34801561048557600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610421565b3480156104b857600080fd5b506104f56040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161033a9190614677565b34801561050e57600080fd5b5060075460085461051d919082565b6040805192835260208301919091520161033a565b34801561053e57600080fd5b5061038f61054d36600461468a565b6113e1565b34801561055e57600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610421565b34801561059157600080fd5b506104f561141b565b3480156105a657600080fd5b506102f66105b53660046146c8565b611429565b6102f66105c8366004614701565b6115d5565b3480156105d957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013561038f565b34801561061957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610325565b34801561064c57600080fd5b5060085461038f565b6102f6611ed5565b34801561066957600080fd5b5060015461038f565b34801561067e57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013561038f565b3480156106be57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061038f565b3480156106f157600080fd5b5061075d61070036600461468a565b6006602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161033a565b3480156107bd57600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161033a565b3480156107fe57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013561038f565b34801561083e57600080fd5b5061032561084d36600461468a565b61242d565b34801561085e57600080fd5b5061038f61086d366004614736565b61260c565b6102f661088036600461457a565b6127ef565b34801561089157600080fd5b506108a56108a036600461468a565b6127fb565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161033a565b34801561091b57600080fd5b506000546103259067ffffffffffffffff1681565b34801561093c57600080fd5b5061038f61094b3660046146c8565b60026020526000908152604090205481565b34801561096957600080fd5b507f000000000000000000000000000000000000000000000000000000000000038561038f565b34801561099c57600080fd5b506102f66109ab3660046147b1565b612892565b3480156109bc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610325565b3480156109ef57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000461038f565b348015610a2257600080fd5b50610a46610a3136600461468a565b60036020526000908152604090205460ff1681565b604051901515815260200161033a565b348015610a6257600080fd5b506102f6610a7136600461483b565b612ec1565b348015610a8257600080fd5b50610a8b613316565b60405161033a93929190614867565b348015610aa657600080fd5b507f000000000000000000000000000000000000000000000000000000000000000861038f565b348015610ad957600080fd5b50610a46610ae836600461468a565b60056020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610b2957610b2961459c565b14610b60576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110610b7557610b7561488c565b906000526020600020906005020190506000610b908461242d565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610bf9576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526005602052604090205460ff1615610c42576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805480158015610c5f57508515155b15610cfa578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115610c925781610cae565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050610cba8187613376565b50505060009485525050600560205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600660209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152610d9d576fffffffffffffffffffffffffffffffff6040820152600181526000869003610d9d578195505b600086826020015163ffffffff16610db591906148ea565b90506000838211610dc65781610dc8565b835b602084015190915063ffffffff165b81811015610f14576000868281548110610df357610df361488c565b6000918252602080832090910154808352600590915260409091205490915060ff16610e4b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110610e6057610e6061488c565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015610ebd5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b15610eff57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b50508080610f0c90614902565b915050610dd7565b5063ffffffff818116602085810191825260008c81526006909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036110eb57606083015187547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff831690810291909117895560008b815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110e990156110c757816110e3565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613376565b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff1660028111156111245761112461459c565b1461115b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff166111bf576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660016000815481106111eb576111eb61488c565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611226576001611229565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156112da576112da61459c565b0217905560028111156112ef576112ef61459c565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561138057600080fd5b505af1158015611394573d6000803e3d6000fd5b5050505090565b600460205281600052604060002081815481106113b757600080fd5b90600052602060002001600091509150505481565b6113d8828260006115d5565b5050565b905090565b6000818152600660209081526040808320600490925282208054825461141290610100900463ffffffff168261493a565b95945050505050565b60606113dc60546020613478565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604081208054908290559081900361148e576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611590576040519150601f19603f3d011682016040523d82523d6000602084013e611595565b606091505b50509050806115d0576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff1660028111156116015761160161459c565b14611638576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001848154811061164d5761164d61488c565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c084015291935090919061171290839086906134ca16565b905060006117b2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508615806117ed57506117ea7f000000000000000000000000000000000000000000000000000000000000000460026148ea565b81145b80156117f7575084155b1561182e576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611888576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b37f000000000000000000000000000000000000000000000000000000000000000460016148ea565b81036118c5576118c5868885886134d2565b346118cf8361260c565b14611906576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119118861242d565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611979576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0166119d99190614951565b67ffffffffffffffff166119f48267ffffffffffffffff1690565b67ffffffffffffffff161115611ad6576000611a3160017f000000000000000000000000000000000000000000000000000000000000000461493a565b8314611a675767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611a9c565b611a9c7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261497a565b9050611ad2817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16614951565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff1615611b54576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b815260200190815260200160002060018080549050611de9919061493a565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff1615611f27576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fff91906149aa565b90925090508161203b576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905536607a1461206e57639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612108576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561245b5761245b61459c565b14612492576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600183815481106124a7576124a761488c565b600091825260208220600590910201805490925063ffffffff9081161461251657815460018054909163ffffffff169081106124e5576124e561488c565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b600482015460009061254e90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b6125629067ffffffffffffffff164261493a565b612581612541846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff1661259591906148ea565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff16116125e25780611412565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b6000806126ab836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f000000000000000000000000000000000000000000000000000000000000000881111561270a576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a300600061272583836149fd565b9050670de0b6b3a7640000600061275c827f0000000000000000000000000000000000000000000000000000000000000008614a11565b9050600061277a612775670de0b6b3a764000086614a11565b613683565b9050600061278884846138de565b90506000612796838361392d565b905060006127a38261395b565b905060006127c2826127bd670de0b6b3a76400008f614a11565b613b43565b905060006127d08b8361392d565b90506127dc818d614a11565b9f9e505050505050505050505050505050565b6113d8828260016115d5565b6001818154811061280b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff1660028111156128be576128be61459c565b146128f5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001878154811061290a5761290a61488c565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506129697f000000000000000000000000000000000000000000000000000000000000000860016148ea565b612a05826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612a3f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915612b3657612a927f00000000000000000000000000000000000000000000000000000000000000047f000000000000000000000000000000000000000000000000000000000000000861493a565b6001901b612ab1846fffffffffffffffffffffffffffffffff16613b7d565b6fffffffffffffffffffffffffffffffff16612acd9190614a4e565b15612b0a57612b01612af260016fffffffffffffffffffffffffffffffff8716614a62565b865463ffffffff166000613c1c565b60030154612b2c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050612b60565b60038501549150612b5d612af26fffffffffffffffffffffffffffffffff86166001614a8b565b90505b600882901b60088a8a604051612b77929190614abf565b6040518091039020901b14612bb8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612bc38c613d00565b90506000612bd2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff169063e14ced3290612c4c908f908f908f908f908a90600401614b18565b6020604051808303816000875af1158015612c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8f9190614b52565b600485015491149150600090600290612d3a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612dd6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b612de09190614b6b565b612dea9190614b8e565b60ff161590508115158103612e2b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615612e82576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff166002811115612eed57612eed61459c565b14612f24576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080612f3386613d2f565b93509350935093506000612f4985858585614138565b905060007f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc9190614bb0565b9050600189036130d75773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461303b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156130ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d19190614b52565b506110eb565b600289036131035773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961303b565b6003890361312f5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761303b565b6004890361324b5760006131756fffffffffffffffffffffffffffffffff85167f00000000000000000000000000000000000000000000000000000000000000046141f2565b60085461318291906148ea565b61318d9060016148ea565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015613220573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132449190614b52565b50506110eb565b600589036132e4576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161308e565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061336f61141b565b9050909192565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff9092169283926133c69084906148ea565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b60006134f16fffffffffffffffffffffffffffffffff84166001614a8b565b9050600061350182866001613c1c565b9050600086901a83806135ed575061353a60027f0000000000000000000000000000000000000000000000000000000000000004614a4e565b60048301546002906135de906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6135e89190614b8e565b60ff16145b156136455760ff811660011480613607575060ff81166002145b613640576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016120ff565b61346f565b60ff81161561346f576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016120ff565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136136e257631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261391b57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b60008160001904831182021561394b5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361398957919050565b680755bf798b4a1bf1e582126139a75763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613b74670de0b6b3a764000083613b5b86613683565b613b659190614bcd565b613b6f9190614c89565b61395b565b90505b92915050565b600080613c0a837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b60008082613c6557613c606fffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000046142a0565b613c80565b613c80856fffffffffffffffffffffffffffffffff1661442c565b905060018481548110613c9557613c9561488c565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff828116911614613cf857815460018054909163ffffffff16908110613ce357613ce361488c565b90600052602060002090600502019150613ca6565b509392505050565b6000806000806000613d1186613d2f565b9350935093509350613d2584848484614138565b9695505050505050565b6000806000806000859050600060018281548110613d4f57613d4f61488c565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490613e26906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e60576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490613f27906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115613f9c57825463ffffffff16613f667f000000000000000000000000000000000000000000000000000000000000000460016148ea565b8303613f70578391505b60018181548110613f8357613f8361488c565b9060005260206000209060050201935080945050613e64565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16614005613ff0856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156140d457600061403d836fffffffffffffffffffffffffffffffff16613b7d565b6fffffffffffffffffffffffffffffffff1611156140a857600061407f61407760016fffffffffffffffffffffffffffffffff8616614a62565b896001613c1c565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506140ae9050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff16975061412a565b60006140f66140776fffffffffffffffffffffffffffffffff85166001614a8b565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156141a55760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611412565b82826040516020016141d39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b60008061427f847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008161433f846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143555763b34b5c226000526004601cfd5b61435e8361442c565b9050816143fd826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613b7757613b746144138360016148ea565b6fffffffffffffffffffffffffffffffff8316906144d1565b600081196001830116816144c0827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b60008061455e847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b6000806040838503121561458d57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310614606577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b8181101561463257602081850181015186830182015201614616565b81811115614644576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613b74602083018461460c565b60006020828403121561469c57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146146c557600080fd5b50565b6000602082840312156146da57600080fd5b81356146e5816146a3565b9392505050565b803580151581146146fc57600080fd5b919050565b60008060006060848603121561471657600080fd5b833592506020840135915061472d604085016146ec565b90509250925092565b60006020828403121561474857600080fd5b81356fffffffffffffffffffffffffffffffff811681146146e557600080fd5b60008083601f84011261477a57600080fd5b50813567ffffffffffffffff81111561479257600080fd5b6020830191508360208285010111156147aa57600080fd5b9250929050565b600080600080600080608087890312156147ca57600080fd5b863595506147da602088016146ec565b9450604087013567ffffffffffffffff808211156147f757600080fd5b6148038a838b01614768565b9096509450606089013591508082111561481c57600080fd5b5061482989828a01614768565b979a9699509497509295939492505050565b60008060006060848603121561485057600080fd5b505081359360208301359350604090920135919050565b63ffffffff84168152826020820152606060408201526000611412606083018461460c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156148fd576148fd6148bb565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614933576149336148bb565b5060010190565b60008282101561494c5761494c6148bb565b500390565b600067ffffffffffffffff83811690831681811015614972576149726148bb565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156149a1576149a16148bb565b02949350505050565b600080604083850312156149bd57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a0c57614a0c6149ce565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a4957614a496148bb565b500290565b600082614a5d57614a5d6149ce565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015614972576149726148bb565b60006fffffffffffffffffffffffffffffffff808316818516808303821115614ab657614ab66148bb565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000614b2c606083018789614acf565b8281036020840152614b3f818688614acf565b9150508260408301529695505050505050565b600060208284031215614b6457600080fd5b5051919050565b600060ff821660ff841680821015614b8557614b856148bb565b90039392505050565b600060ff831680614ba157614ba16149ce565b8060ff84160691505092915050565b600060208284031215614bc257600080fd5b81516146e5816146a3565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614c0e57614c0e6148bb565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614c4957614c496148bb565b60008712925087820587128484161615614c6557614c656148bb565b87850587128184161615614c7b57614c7b6148bb565b505050929093029392505050565b600082614c9857614c986149ce565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614cec57614cec6148bb565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b8063a445ece611610143578063bd8da9561161011d578063bd8da956146108e4578063c395e1ca14610904578063c55cd0c71461092457600080fd5b8063a445ece614610797578063bbdc02db14610863578063bcef3b55146108a457600080fd5b80638980e0cc116101745780638980e0cc1461070f5780638b85902b146107245780638d450a951461076457600080fd5b806370872aa5146106f25780638129fc1c1461070757600080fd5b80633e3ac912116102485780635c0cba33116101fc578063632247ea116101d6578063632247ea1461066c5780636361506d1461067f5780636b6716c0146106bf57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633e3ac912146104eb5780633fc8cef31461052b57600080fd5b80632810e1d6116102aa57806335fef5671161028457806335fef5671461046557806337b1b229146104785780633a768463146104b857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b506103176103123660046152f4565b610b9f565b005b34801561032557600080fd5b5061031761033436600461534f565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153a0565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e36600461534f565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b61031761047336600461534f565b61183c565b34801561048457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104c457600080fd5b507f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce46610440565b3480156104f757600080fd5b5060005461051b907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561053757600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e312e3100000000000000000000000000000000000000000000000000000081525081565b60405161037b919061544c565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff36600461545f565b611851565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188b565b34801561065857600080fd5b5061031761066736600461549d565b611899565b61031761067a3660046154cf565b611a45565b34801561068b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106cb57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b3480156106fe57600080fd5b506009546103d0565b6103176123a3565b34801561071b57600080fd5b506002546103d0565b34801561073057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561077057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107a357600080fd5b5061080f6107b236600461545f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561086f57600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108b057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b3480156108f057600080fd5b506103666108ff36600461545f565b6128fc565b34801561091057600080fd5b506103d061091f366004615504565b612adb565b61031761093236600461534f565b612cbe565b34801561094357600080fd5b5061095761095236600461545f565b612cca565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd36600461549d565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d366004615536565b612d61565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b5061051b610ae336600461545f565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b133660046155c0565b613390565b348015610b2457600080fd5b50610b2d6137e2565b60405161037b939291906155ec565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b5061051b610b8a36600461545f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb615371565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615640565b613842565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef9291906156cd565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061389e92505050565b61390b565b90506000610d9e82600881518110610d9157610d916156dd565b6020026020010151613ac1565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec615371565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f386156dd565b906000526020600020906005020190506000610f53846128fc565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613b75565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061573b565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b66156dd565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110611223576112236156dd565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615753565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613b75565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613b75565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561159457611594615371565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b6156dd565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a615371565b02179055600281111561175f5761175f615371565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b61184882826000611a45565b5050565b905090565b6000818152600760209081526040808320600590925282208054825461188290610100900463ffffffff168261578b565b95945050505050565b606061184c60546020613c76565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120805490829055908190036118fe576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a00576040519150601f19603f3d011682016040523d82523d6000602084013e611a05565b606091505b5050905080611a40576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115611a7157611a71615371565b14611aa8576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611abd57611abd6156dd565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190611b829083908690613cc816565b90506000611c22826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c5d5750611c5a7f0000000000000000000000000000000000000000000000000000000000000004600261573b565b81145b8015611c67575084155b15611c9e576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611cc4575086155b15611cfb576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d55576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d807f0000000000000000000000000000000000000000000000000000000000000004600161573b565b8103611d9257611d9286888588613cd0565b34611d9c83612adb565b14611dd3576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611dde886128fc565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e46576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ea691906157a2565b67ffffffffffffffff16611ec18267ffffffffffffffff1690565b67ffffffffffffffff161115611fa3576000611efe60017f000000000000000000000000000000000000000000000000000000000000000461578b565b8314611f345767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f69565b611f697f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1660026157cb565b9050611f9f817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157a2565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612021576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122b7919061578b565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff16156123f5576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cd91906157fb565b909250905081612509576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461253c57639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135116125d6576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128ab57600080fd5b505af11580156128bf573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561292a5761292a615371565b14612961576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110612976576129766156dd565b600091825260208220600590910201805490925063ffffffff908116146129e557815460028054909163ffffffff169081106129b4576129b46156dd565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a1d90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a319067ffffffffffffffff164261578b565b612a50612a10846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612a64919061573b565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612ab15780611882565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612b7a836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612bd9576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612bf4838361584e565b9050670de0b6b3a76400006000612c2b827f0000000000000000000000000000000000000000000000000000000000000008615862565b90506000612c49612c44670de0b6b3a764000086615862565b613e81565b90506000612c5784846140dc565b90506000612c65838361412b565b90506000612c7282614159565b90506000612c9182612c8c670de0b6b3a76400008f615862565b614341565b90506000612c9f8b8361412b565b9050612cab818d615862565b9f9e505050505050505050505050505050565b61184882826001611a45565b60028181548110612cda57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612d8d57612d8d615371565b14612dc4576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612dd957612dd96156dd565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e387f0000000000000000000000000000000000000000000000000000000000000008600161573b565b612ed4826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f0e576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561300557612f617f00000000000000000000000000000000000000000000000000000000000000047f000000000000000000000000000000000000000000000000000000000000000861578b565b6001901b612f80846fffffffffffffffffffffffffffffffff1661437b565b6fffffffffffffffffffffffffffffffff16612f9c919061589f565b15612fd957612fd0612fc160016fffffffffffffffffffffffffffffffff87166158b3565b865463ffffffff16600061441a565b60030154612ffb565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061302f565b6003850154915061302c612fc16fffffffffffffffffffffffffffffffff861660016158dc565b90505b600882901b60088a8a6040516130469291906156cd565b6040518091039020901b14613087576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130928c6144fe565b905060006130a1836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff169063e14ced329061311b908f908f908f908f908a90600401615959565b6020604051808303816000875af115801561313a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315e9190615993565b600485015491149150600090600290613209906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132a5896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132af91906159ac565b6132b991906159cf565b60ff1615905081151581036132fa576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613351576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133bc576133bc615371565b146133f3576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806134028661452d565b9350935093509350600061341885858585614936565b905060007f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab91906159f1565b9050600189036135a35773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613507367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015613579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359d9190615993565b5061155b565b600289036135cf5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613507565b600389036135fb5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613507565b600489036137175760006136416fffffffffffffffffffffffffffffffff85167f00000000000000000000000000000000000000000000000000000000000000046149f0565b60095461364e919061573b565b61365990600161573b565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af11580156136ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137109190615993565b505061155b565b600589036137b0576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161355a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061383b61188b565b9050909192565b60008160000151826020015183604001518460600151604051602001613881949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b604080518082019091526000808252602082015281516000036138ed576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061391b85614a9e565b91945092509050600181600181111561393657613936615371565b1461396d576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451613979838561573b565b146139b0576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816139c75790505093506000835b8651811015613ab557600080613a3a6040518060400160405280858c60000151613a1e919061578b565b8152602001858c60200151613a33919061573b565b9052614a9e565b509150915060405180604001604052808383613a56919061573b565b8152602001848b60200151613a6b919061573b565b815250888581518110613a8057613a806156dd565b6020908102919091010152613a9660018561573b565b9350613aa2818361573b565b613aac908461573b565b925050506139f4565b50845250919392505050565b60606000806000613ad185614a9e565b919450925090506000816001811115613aec57613aec615371565b14613b23576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b2d828461573b565b855114613b66576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188285602001518484614f3c565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613bc490849061573b565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c5957600080fd5b505af1158015613c6d573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b6000613cef6fffffffffffffffffffffffffffffffff841660016158dc565b90506000613cff8286600161441a565b9050600086901a8380613deb5750613d3860027f000000000000000000000000000000000000000000000000000000000000000461589f565b6004830154600290613ddc906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613de691906159cf565b60ff16145b15613e435760ff811660011480613e05575060ff81166002145b613e3e576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016125cd565b613c6d565b60ff811615613c6d576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016125cd565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613ee057631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261411957637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141495763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361418757919050565b680755bf798b4a1bf1e582126141a55763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000614372670de0b6b3a76400008361435986613e81565b6143639190615a0e565b61436d9190615aca565b614159565b90505b92915050565b600080614408837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826144635761445e6fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004614fd1565b61447e565b61447e856fffffffffffffffffffffffffffffffff1661515d565b905060028481548110614493576144936156dd565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146144f657815460028054909163ffffffff169081106144e1576144e16156dd565b906000526020600020906005020191506144a4565b509392505050565b600080600080600061450f8661452d565b935093509350935061452384848484614936565b9695505050505050565b600080600080600085905060006002828154811061454d5761454d6156dd565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614624906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161465e576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614725906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16925082111561479a57825463ffffffff166147647f0000000000000000000000000000000000000000000000000000000000000004600161573b565b830361476e578391505b60028181548110614781576147816156dd565b9060005260206000209060050201935080945050614662565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff166148036147ee856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156148d257600061483b836fffffffffffffffffffffffffffffffff1661437b565b6fffffffffffffffffffffffffffffffff1611156148a657600061487d61487560016fffffffffffffffffffffffffffffffff86166158b3565b89600161441a565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148ac9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614928565b60006148f46148756fffffffffffffffffffffffffffffffff851660016158dc565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149a35760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611882565b82826040516020016149d19291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614a7d847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614ae1576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b06576000600160009450945094505050614f35565b60b78111614c1c576000614b1b60808361578b565b905080876000015111614b5a576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614bd257507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c09576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f35915050565b60bf8111614d7a576000614c3160b78361578b565b905080876000015111614c70576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614cd2576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d1a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d24818461573b565b895111614d5d576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d6883600161573b565b9750955060009450614f359350505050565b60f78111614ddf576000614d8f60c08361578b565b905080876000015111614dce576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f35915050565b6000614dec60f78361578b565b905080876000015111614e2b576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614e8d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614ed5576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614edf818461573b565b895111614f18576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f2383600161573b565b9750955060019450614f359350505050565b9193909250565b60608167ffffffffffffffff811115614f5757614f57615611565b6040519080825280601f01601f191660200182016040528015614f81576020820181803683370190505b5090508115614fca576000614f96848661573b565b90506020820160005b84811015614fb7578281015182820152602001614f9f565b84811115614fc6576000858301525b5050505b9392505050565b600081615070846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150865763b34b5c226000526004601cfd5b61508f8361515d565b90508161512e826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143755761437261514483600161573b565b6fffffffffffffffffffffffffffffffff831690615202565b600081196001830116816151f1827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b60008061528f847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152bd57600080fd5b50813567ffffffffffffffff8111156152d557600080fd5b6020830191508360208285010111156152ed57600080fd5b9250929050565b600080600083850360a081121561530a57600080fd5b608081121561531857600080fd5b50839250608084013567ffffffffffffffff81111561533657600080fd5b615342868287016152ab565b9497909650939450505050565b6000806040838503121561536257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106153db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b81811015615407576020818501810151868301820152016153eb565b81811115615419576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061437260208301846153e1565b60006020828403121561547157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461549a57600080fd5b50565b6000602082840312156154af57600080fd5b8135614fca81615478565b803580151581146154ca57600080fd5b919050565b6000806000606084860312156154e457600080fd5b83359250602084013591506154fb604085016154ba565b90509250925092565b60006020828403121561551657600080fd5b81356fffffffffffffffffffffffffffffffff81168114614fca57600080fd5b6000806000806000806080878903121561554f57600080fd5b8635955061555f602088016154ba565b9450604087013567ffffffffffffffff8082111561557c57600080fd5b6155888a838b016152ab565b909650945060608901359150808211156155a157600080fd5b506155ae89828a016152ab565b979a9699509497509295939492505050565b6000806000606084860312156155d557600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061188260608301846153e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561565257600080fd5b6040516080810181811067ffffffffffffffff8211171561569c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561574e5761574e61570c565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157845761578461570c565b5060010190565b60008282101561579d5761579d61570c565b500390565b600067ffffffffffffffff838116908316818110156157c3576157c361570c565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156157f2576157f261570c565b02949350505050565b6000806040838503121561580e57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261585d5761585d61581f565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561589a5761589a61570c565b500290565b6000826158ae576158ae61581f565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156157c3576157c361570c565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156159075761590761570c565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60608152600061596d606083018789615910565b8281036020840152615980818688615910565b9150508260408301529695505050505050565b6000602082840312156159a557600080fd5b5051919050565b600060ff821660ff8416808210156159c6576159c661570c565b90039392505050565b600060ff8316806159e2576159e261581f565b8060ff84160691505092915050565b600060208284031215615a0357600080fd5b8151614fca81615478565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a4f57615a4f61570c565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615a8a57615a8a61570c565b60008712925087820587128484161615615aa657615aa661570c565b87850587128184161615615abc57615abc61570c565b505050929093029392505050565b600082615ad957615ad961581f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b2d57615b2d61570c565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106102e75760003560e01c80638980e0cc11610184578063cf09e0d0116100d6578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610af2578063fa315aa914610b16578063fe2bbeb214610b4957600080fd5b8063ec5e630814610a5f578063eff0f59214610a92578063f8f43ff614610ad257600080fd5b8063d6ae3cd5116100bb578063d6ae3cd5146109d9578063d8cc1a3c14610a0c578063dabd396d14610a2c57600080fd5b8063cf09e0d01461098b578063d5d44d80146109ac57600080fd5b8063bbdc02db11610138578063c395e1ca11610112578063c395e1ca146108ce578063c55cd0c7146108ee578063c6f0308c1461090157600080fd5b8063bbdc02db1461082d578063bcef3b551461086e578063bd8da956146108ae57600080fd5b80638d450a95116101695780638d450a95146106fb578063a445ece61461072e578063a8e4fb90146107fa57600080fd5b80638980e0cc146106a65780638b85902b146106bb57600080fd5b806354fd4d501161023d57806360e27464116101f15780636b6716c0116101cb5780636b6716c01461065657806370872aa5146106895780638129fc1c1461069e57600080fd5b806360e27464146105e3578063632247ea146106035780636361506d1461061657600080fd5b80635a5fa2d9116102225780635a5fa2d91461057b5780635c0cba331461059b578063609d3334146105ce57600080fd5b806354fd4d50146104f557806357da950e1461054b57600080fd5b80632ad69aeb1161029f5780633a768463116102795780633a7684631461045c5780633fc8cef31461048f578063534db0e2146104c257600080fd5b80632ad69aeb146103c857806335fef567146103e857806337b1b229146103fb57600080fd5b8063200d2ed2116102d0578063200d2ed21461035957806325fc2ace146103945780632810e1d6146103b357600080fd5b806303c2924d146102ec57806319effeb41461030e575b600080fd5b3480156102f857600080fd5b5061030c6103073660046147ee565b610b79565b005b34801561031a57600080fd5b5060005461033b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561036557600080fd5b5060005461038790700100000000000000000000000000000000900460ff1681565b604051610350919061483f565b3480156103a057600080fd5b506007545b604051908152602001610350565b3480156103bf57600080fd5b50610387611172565b3480156103d457600080fd5b506103a56103e33660046147ee565b611417565b61030c6103f63660046147ee565b611448565b34801561040757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610350565b34801561046857600080fd5b507f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce46610437565b34801561049b57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610437565b3480156104ce57600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610437565b34801561050157600080fd5b5061053e6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161035091906148eb565b34801561055757600080fd5b50600754600854610566919082565b60408051928352602083019190915201610350565b34801561058757600080fd5b506103a56105963660046148fe565b61145d565b3480156105a757600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610437565b3480156105da57600080fd5b5061053e611497565b3480156105ef57600080fd5b5061030c6105fe36600461493c565b6114a5565b61030c610611366004614975565b611651565b34801561062257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103a5565b34801561066257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033b565b34801561069557600080fd5b506008546103a5565b61030c61170b565b3480156106b257600080fd5b506001546103a5565b3480156106c757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103a5565b34801561070757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103a5565b34801561073a57600080fd5b506107a66107493660046148fe565b6006602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610350565b34801561080657600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610437565b34801561083957600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610350565b34801561087a57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103a5565b3480156108ba57600080fd5b5061033b6108c93660046148fe565b611784565b3480156108da57600080fd5b506103a56108e93660046149aa565b611963565b61030c6108fc3660046147ee565b611b46565b34801561090d57600080fd5b5061092161091c3660046148fe565b611b52565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610350565b34801561099757600080fd5b5060005461033b9067ffffffffffffffff1681565b3480156109b857600080fd5b506103a56109c736600461493c565b60026020526000908152604090205481565b3480156109e557600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103a5565b348015610a1857600080fd5b5061030c610a27366004614a25565b611be9565b348015610a3857600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061033b565b348015610a6b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103a5565b348015610a9e57600080fd5b50610ac2610aad3660046148fe565b60036020526000908152604090205460ff1681565b6040519015158152602001610350565b348015610ade57600080fd5b5061030c610aed366004614aaf565b611cae565b348015610afe57600080fd5b50610b07612103565b60405161035093929190614adb565b348015610b2257600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103a5565b348015610b5557600080fd5b50610ac2610b643660046148fe565b60056020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610ba557610ba5614810565b14610bdc576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110610bf157610bf1614b00565b906000526020600020906005020190506000610c0c84611784565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610c75576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526005602052604090205460ff1615610cbe576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600460205260409020805480158015610cdb57508515155b15610d76578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115610d0e5781610d2a565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050610d368187612163565b50505060009485525050600560205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600660209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152610e19576fffffffffffffffffffffffffffffffff6040820152600181526000869003610e19578195505b600086826020015163ffffffff16610e319190614b5e565b90506000838211610e425781610e44565b835b602084015190915063ffffffff165b81811015610f90576000868281548110610e6f57610e6f614b00565b6000918252602080832090910154808352600590915260409091205490915060ff16610ec7576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110610edc57610edc614b00565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015610f395750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b15610f7b57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b50508080610f8890614b76565b915050610e53565b5063ffffffff818116602085810191825260008c81526006909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361116757606083015187547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff831690810291909117895560008b815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556111659015611143578161115f565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612163565b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff1660028111156111a0576111a0614810565b146111d7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff1661123b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008154811061126757611267614b00565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff16146112a25760016112a5565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561135657611356614810565b02179055600281111561136b5761136b614810565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113fc57600080fd5b505af1158015611410573d6000803e3d6000fd5b5050505090565b6004602052816000526040600020818154811061143357600080fd5b90600052602060002001600091509150505481565b61145482826000611651565b5050565b905090565b6000818152600660209081526040808320600490925282208054825461148e90610100900463ffffffff1682614bae565b95945050505050565b606061145860546020612265565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604081208054908290559081900361150a576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561159a57600080fd5b505af11580156115ae573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461160c576040519150601f19603f3d011682016040523d82523d6000602084013e611611565b606091505b505090508061164c576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806116ca57503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611700576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61164c8383836122b7565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161461177a576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611782612bb7565b565b600080600054700100000000000000000000000000000000900460ff1660028111156117b2576117b2614810565b146117e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600183815481106117fe576117fe614b00565b600091825260208220600590910201805490925063ffffffff9081161461186d57815460018054909163ffffffff1690811061183c5761183c614b00565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b60048201546000906118a590700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b6118b99067ffffffffffffffff1642614bae565b6118d8611898846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166118ec9190614b5e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611939578061148e565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611a02836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611a61576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611a7c8383614bf4565b9050670de0b6b3a76400006000611ab3827f0000000000000000000000000000000000000000000000000000000000000008614c08565b90506000611ad1611acc670de0b6b3a764000086614c08565b61310f565b90506000611adf848461336a565b90506000611aed83836133b9565b90506000611afa826133e7565b90506000611b1982611b14670de0b6b3a76400008f614c08565b6135cf565b90506000611b278b836133b9565b9050611b33818d614c08565b9f9e505050505050505050505050505050565b61145482826001611651565b60018181548110611b6257600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611c6257503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611c98576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ca6868686868686613609565b505050505050565b60008054700100000000000000000000000000000000900460ff166002811115611cda57611cda614810565b14611d11576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611d2086613c38565b93509350935093506000611d3685858585614041565b905060007f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190614c45565b905060018903611ec45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84611e28367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614c62565b50611167565b60028903611ef05773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489611e28565b60038903611f1c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487611e28565b60048903612038576000611f626fffffffffffffffffffffffffffffffff85167f00000000000000000000000000000000000000000000000000000000000000046140fb565b600854611f6f9190614b5e565b611f7a906001614b5e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190614c62565b5050611167565b600589036120d1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a401611e7b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061215c611497565b9050909192565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff9092169283926121b3908490614b5e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff1660028111156122e3576122e3614810565b1461231a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001848154811061232f5761232f614b00565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c08401529193509091906123f490839086906141a916565b90506000612494826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508615806124cf57506124cc7f00000000000000000000000000000000000000000000000000000000000000046002614b5e565b81145b80156124d9575084155b15612510576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000881111561256a576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125957f00000000000000000000000000000000000000000000000000000000000000046001614b5e565b81036125a7576125a7868885886141b1565b346125b183611963565b146125e8576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006125f388611784565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082160361265b576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0166126bb9190614c7b565b67ffffffffffffffff166126d68267ffffffffffffffff1690565b67ffffffffffffffff1611156127b857600061271360017f0000000000000000000000000000000000000000000000000000000000000004614bae565b83146127495767ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661277e565b61277e7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002614ca4565b90506127b4817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16614c7b565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff1615612836576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b815260200190815260200160002060018080549050612acb9190614bae565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b158015612b6357600080fd5b505af1158015612b77573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff1615612c09576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015612cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce19190614cd4565b909250905081612d1d576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526007829055600881905536607a14612d5057639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612dea576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156130be57600080fd5b505af11580156130d2573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b176000821361316e57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a7640000021582026133a757637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156133d75763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361341557919050565b680755bf798b4a1bf1e582126134335763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613600670de0b6b3a7640000836135e78661310f565b6135f19190614cf8565b6135fb9190614db4565b6133e7565b90505b92915050565b60008054700100000000000000000000000000000000900460ff16600281111561363557613635614810565b1461366c576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001878154811061368157613681614b00565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506136e07f00000000000000000000000000000000000000000000000000000000000000086001614b5e565b61377c826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16146137b6576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156138ad576138097f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008614bae565b6001901b613828846fffffffffffffffffffffffffffffffff16614362565b6fffffffffffffffffffffffffffffffff166138449190614e1c565b156138815761387861386960016fffffffffffffffffffffffffffffffff8716614e30565b865463ffffffff166000614401565b600301546138a3565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506138d7565b600385015491506138d46138696fffffffffffffffffffffffffffffffff86166001614e59565b90505b600882901b60088a8a6040516138ee929190614e8d565b6040518091039020901b1461392f576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061393a8c6144e5565b90506000613949836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff169063e14ced32906139c3908f908f908f908f908a90600401614ee6565b6020604051808303816000875af11580156139e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a069190614c62565b600485015491149150600090600290613ab1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613b4d896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613b579190614f20565b613b619190614f43565b60ff161590508115158103613ba2576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613bf9576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b6000806000806000859050600060018281548110613c5857613c58614b00565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490613d2f906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613d69576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490613e30906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115613ea557825463ffffffff16613e6f7f00000000000000000000000000000000000000000000000000000000000000046001614b5e565b8303613e79578391505b60018181548110613e8c57613e8c614b00565b9060005260206000209060050201935080945050613d6d565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16613f0e613ef9856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015613fdd576000613f46836fffffffffffffffffffffffffffffffff16614362565b6fffffffffffffffffffffffffffffffff161115613fb1576000613f88613f8060016fffffffffffffffffffffffffffffffff8616614e30565b896001614401565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50613fb79050565b6007549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614033565b6000613fff613f806fffffffffffffffffffffffffffffffff85166001614e59565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156140ae5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012061148e565b82826040516020016140dc9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614188847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b151760011b90565b60006141d06fffffffffffffffffffffffffffffffff84166001614e59565b905060006141e082866001614401565b9050600086901a83806142cc575061421960027f0000000000000000000000000000000000000000000000000000000000000004614e1c565b60048301546002906142bd906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6142c79190614f43565b60ff16145b156143245760ff8116600114806142e6575060ff81166002145b61431f576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401612de1565b61225c565b60ff81161561225c576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401612de1565b6000806143ef837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261444a576144456fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004614514565b614465565b614465856fffffffffffffffffffffffffffffffff166146a0565b90506001848154811061447a5761447a614b00565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146144dd57815460018054909163ffffffff169081106144c8576144c8614b00565b9060005260206000209060050201915061448b565b509392505050565b60008060008060006144f686613c38565b935093509350935061450a84848484614041565b9695505050505050565b6000816145b3846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145c95763b34b5c226000526004601cfd5b6145d2836146a0565b905081614671826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161360357613600614687836001614b5e565b6fffffffffffffffffffffffffffffffff831690614745565b60008119600183011681614734827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806147d2847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b6000806040838503121561480157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061487a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b818110156148a65760208185018101518683018201520161488a565b818111156148b8576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006136006020830184614880565b60006020828403121561491057600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461493957600080fd5b50565b60006020828403121561494e57600080fd5b813561495981614917565b9392505050565b8035801515811461497057600080fd5b919050565b60008060006060848603121561498a57600080fd5b83359250602084013591506149a160408501614960565b90509250925092565b6000602082840312156149bc57600080fd5b81356fffffffffffffffffffffffffffffffff8116811461495957600080fd5b60008083601f8401126149ee57600080fd5b50813567ffffffffffffffff811115614a0657600080fd5b602083019150836020828501011115614a1e57600080fd5b9250929050565b60008060008060008060808789031215614a3e57600080fd5b86359550614a4e60208801614960565b9450604087013567ffffffffffffffff80821115614a6b57600080fd5b614a778a838b016149dc565b90965094506060890135915080821115614a9057600080fd5b50614a9d89828a016149dc565b979a9699509497509295939492505050565b600080600060608486031215614ac457600080fd5b505081359360208301359350604090920135919050565b63ffffffff8416815282602082015260606040820152600061148e6060830184614880565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614b7157614b71614b2f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ba757614ba7614b2f565b5060010190565b600082821015614bc057614bc0614b2f565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614c0357614c03614bc5565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c4057614c40614b2f565b500290565b600060208284031215614c5757600080fd5b815161495981614917565b600060208284031215614c7457600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015614c9c57614c9c614b2f565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615614ccb57614ccb614b2f565b02949350505050565b60008060408385031215614ce757600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614d3957614d39614b2f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614d7457614d74614b2f565b60008712925087820587128484161615614d9057614d90614b2f565b87850587128184161615614da657614da6614b2f565b505050929093029392505050565b600082614dc357614dc3614bc5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614e1757614e17614b2f565b500590565b600082614e2b57614e2b614bc5565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015614c9c57614c9c614b2f565b60006fffffffffffffffffffffffffffffffff808316818516808303821115614e8457614e84614b2f565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000614efa606083018789614e9d565b8281036020840152614f0d818688614e9d565b9150508260408301529695505050505050565b600060ff821660ff841680821015614f3a57614f3a614b2f565b90039392505050565b600060ff831680614f5657614f56614bc5565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a8e4fb9011610143578063bd8da9561161011d578063bd8da95614610960578063c395e1ca14610980578063c55cd0c7146109a057600080fd5b8063a8e4fb90146108ac578063bbdc02db146108df578063bcef3b551461092057600080fd5b80638b85902b116101745780638b85902b1461076d5780638d450a95146107ad578063a445ece6146107e057600080fd5b806370872aa51461073b5780638129fc1c146107505780638980e0cc1461075857600080fd5b80633e3ac9121161025e5780635c0cba3311610207578063632247ea116101e1578063632247ea146106b55780636361506d146106c85780636b6716c01461070857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633e3ac912146105015780633fc8cef314610541578063534db0e21461057457600080fd5b80632810e1d6116102c057806335fef5671161029a57806335fef5671461047b57806337b1b2291461048e5780633a768463146104ce57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d610328366004615568565b610c1b565b005b34801561033b57600080fd5b5061032d61034a3660046155c3565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615614565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e66104243660046155c3565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b61032d6104893660046155c3565b6118b8565b34801561049a57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104da57600080fd5b507f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce46610456565b34801561050d57600080fd5b50600054610531907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561054d57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e312e3100000000000000000000000000000000000000000000000000000081525081565b60405161039191906156c0565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e66106483660046156d3565b6118cd565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611907565b3480156106a157600080fd5b5061032d6106b0366004615711565b611915565b61032d6106c3366004615743565b611ac1565b3480156106d457600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561071457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b34801561074757600080fd5b506009546103e6565b61032d611b7b565b34801561076457600080fd5b506002546103e6565b34801561077957600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107b957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ec57600080fd5b506108586107fb3660046156d3565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108b857600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108eb57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561092c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561096c57600080fd5b5061037c61097b3660046156d3565b611bf4565b34801561098c57600080fd5b506103e661099b366004615778565b611dd3565b61032d6109ae3660046155c3565b611fb6565b3480156109bf57600080fd5b506109d36109ce3660046156d3565b611fc2565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a79366004615711565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad93660046157aa565b612059565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b50610531610b5f3660046156d3565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615834565b61211e565b348015610ba057600080fd5b50610ba9612570565b60405161039193929190615860565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b50610531610c063660046156d3565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c476155e5565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158b4565b6125d0565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b929190615941565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061262c92505050565b612699565b90506000610e1a82600881518110610e0d57610e0d615951565b602002602001015161284f565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f686155e5565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb4615951565b906000526020600020906005020190506000610fcf84611bf4565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612903565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159af565b905060008382116112055781611207565b835b602084015190915063ffffffff165b8181101561135357600086828154811061123257611232615951565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f615951565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b906159c7565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612903565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612903565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611610576116106155e5565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d7615951565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c66155e5565b0217905560028111156117db576117db6155e5565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b6118c482826000611ac1565b5050565b905090565b600081815260076020908152604080832060059092528220805482546118fe90610100900463ffffffff16826159ff565b95945050505050565b60606118c860546020612a04565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197a576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7c576040519150601f19603f3d011682016040523d82523d6000602084013e611a81565b606091505b5050905080611abc576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3a57503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b70576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611abc838383612a56565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bea576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bf26133b4565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c2257611c226155e5565b14611c59576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c6e57611c6e615951565b600091825260208220600590910201805490925063ffffffff90811614611cdd57815460028054909163ffffffff16908110611cac57611cac615951565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d1590700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d299067ffffffffffffffff16426159ff565b611d48611d08846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d5c91906159af565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611da957806118fe565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e72836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ed1576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611eec8383615a45565b9050670de0b6b3a76400006000611f23827f0000000000000000000000000000000000000000000000000000000000000008615a59565b90506000611f41611f3c670de0b6b3a764000086615a59565b61390d565b90506000611f4f8484613b68565b90506000611f5d8383613bb7565b90506000611f6a82613be5565b90506000611f8982611f84670de0b6b3a76400008f615a59565b613dcd565b90506000611f978b83613bb7565b9050611fa3818d615a59565b9f9e505050505050505050505050505050565b6118c482826001611ac1565b60028181548110611fd257600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d257503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b612108576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612116868686868686613e07565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214a5761214a6155e5565b14612181576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061219086614436565b935093509350935060006121a68585858561483f565b905060007f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122399190615a96565b9050600189036123315773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612295367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232b9190615ab3565b506115d7565b6002890361235d5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612295565b600389036123895773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612295565b600489036124a55760006123cf6fffffffffffffffffffffffffffffffff85167f00000000000000000000000000000000000000000000000000000000000000046148f9565b6009546123dc91906159af565b6123e79060016159af565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249e9190615ab3565b50506115d7565b6005890361253e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122e8565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125c9611907565b9050909192565b6000816000015182602001518360400151846060015160405160200161260f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361267b576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126a9856149a7565b9194509250905060018160018111156126c4576126c46155e5565b146126fb576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270783856159af565b1461273e576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816127555790505093506000835b8651811015612843576000806127c86040518060400160405280858c600001516127ac91906159ff565b8152602001858c602001516127c191906159af565b90526149a7565b5091509150604051806040016040528083836127e491906159af565b8152602001848b602001516127f991906159af565b81525088858151811061280e5761280e615951565b60209081029190910101526128246001856159af565b935061283081836159af565b61283a90846159af565b92505050612782565b50845250919392505050565b6060600080600061285f856149a7565b91945092509050600081600181111561287a5761287a6155e5565b146128b1576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128bb82846159af565b8551146128f4576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fe85602001518484614e45565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129529084906159af565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129e757600080fd5b505af11580156129fb573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8257612a826155e5565b14612ab9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ace57612ace615951565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190612b939083908690614eda16565b90506000612c33826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612c6e5750612c6b7f000000000000000000000000000000000000000000000000000000000000000460026159af565b81145b8015612c78575084155b15612caf576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612cd5575086155b15612d0c576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612d66576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d917f000000000000000000000000000000000000000000000000000000000000000460016159af565b8103612da357612da386888588614ee2565b34612dad83611dd3565b14612de4576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612def88611bf4565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e57576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612eb79190615acc565b67ffffffffffffffff16612ed28267ffffffffffffffff1690565b67ffffffffffffffff161115612fb4576000612f0f60017f00000000000000000000000000000000000000000000000000000000000000046159ff565b8314612f455767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612f7a565b612f7a7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615af5565b9050612fb0817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615acc565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613032576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506132c891906159ff565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561336057600080fd5b505af1158015613374573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff1615613406576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156134ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134de9190615b25565b90925090508161351a576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461354d57639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135116135e7576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156138bc57600080fd5b505af11580156138d0573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b176000821361396c57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613ba557637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613bd55763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c1357919050565b680755bf798b4a1bf1e58212613c315763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613dfe670de0b6b3a764000083613de58661390d565b613def9190615b49565b613df99190615c05565b613be5565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e3357613e336155e5565b14613e6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613e7f57613e7f615951565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613ede7f000000000000000000000000000000000000000000000000000000000000000860016159af565b613f7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613fb4576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140ab576140077f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086159ff565b6001901b614026846fffffffffffffffffffffffffffffffff16615093565b6fffffffffffffffffffffffffffffffff166140429190615c6d565b1561407f5761407661406760016fffffffffffffffffffffffffffffffff8716615c81565b865463ffffffff166000615132565b600301546140a1565b7f00000000000000000000000000000000000000000000000000000000000000005b91508490506140d5565b600385015491506140d26140676fffffffffffffffffffffffffffffffff86166001615caa565b90505b600882901b60088a8a6040516140ec929190615941565b6040518091039020901b1461412d576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141388c615216565b90506000614147836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000004edc7df83e441cc0399642cef7bd9437f021ce4673ffffffffffffffffffffffffffffffffffffffff169063e14ced32906141c1908f908f908f908f908a90600401615d27565b6020604051808303816000875af11580156141e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142049190615ab3565b6004850154911491506000906002906142af906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61434b896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143559190615d61565b61435f9190615d84565b60ff1615905081151581036143a0576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff16156143f7576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061445657614456615951565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061452d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614567576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061462e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146a357825463ffffffff1661466d7f000000000000000000000000000000000000000000000000000000000000000460016159af565b8303614677578391505b6002818154811061468a5761468a615951565b906000526020600020906005020193508094505061456b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661470c6146f7856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1614905080156147db576000614744836fffffffffffffffffffffffffffffffff16615093565b6fffffffffffffffffffffffffffffffff1611156147af57600061478661477e60016fffffffffffffffffffffffffffffffff8616615c81565b896001615132565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147b59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614831565b60006147fd61477e6fffffffffffffffffffffffffffffffff85166001615caa565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148ac5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a001604051602081830303815290604052805190602001206118fe565b82826040516020016148da9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614986847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b600080600083600001516000036149ea576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a0f576000600160009450945094505050614e3e565b60b78111614b25576000614a246080836159ff565b905080876000015111614a63576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614adb57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b12576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e3e915050565b60bf8111614c83576000614b3a60b7836159ff565b905080876000015111614b79576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614bdb576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c2d81846159af565b895111614c66576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c718360016159af565b9750955060009450614e3e9350505050565b60f78111614ce8576000614c9860c0836159ff565b905080876000015111614cd7576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e3e915050565b6000614cf560f7836159ff565b905080876000015111614d34576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d96576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614de881846159af565b895111614e21576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e2c8360016159af565b9750955060019450614e3e9350505050565b9193909250565b60608167ffffffffffffffff811115614e6057614e60615885565b6040519080825280601f01601f191660200182016040528015614e8a576020820181803683370190505b5090508115614ed3576000614e9f84866159af565b90506020820160005b84811015614ec0578281015182820152602001614ea8565b84811115614ecf576000858301525b5050505b9392505050565b151760011b90565b6000614f016fffffffffffffffffffffffffffffffff84166001615caa565b90506000614f1182866001615132565b9050600086901a8380614ffd5750614f4a60027f0000000000000000000000000000000000000000000000000000000000000004615c6d565b6004830154600290614fee906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614ff89190615d84565b60ff16145b156150555760ff811660011480615017575060ff81166002145b615050576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016135de565b6129fb565b60ff8116156129fb576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016135de565b600080615120837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261517b576151766fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615245565b615196565b615196856fffffffffffffffffffffffffffffffff166153d1565b9050600284815481106151ab576151ab615951565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461520e57815460028054909163ffffffff169081106151f9576151f9615951565b906000526020600020906005020191506151bc565b509392505050565b600080600080600061522786614436565b935093509350935061523b8484848461483f565b9695505050505050565b6000816152e4846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116152fa5763b34b5c226000526004601cfd5b615303836153d1565b9050816153a2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e0157613dfe6153b88360016159af565b6fffffffffffffffffffffffffffffffff831690615476565b60008119600183011681615465827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615503847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261553157600080fd5b50813567ffffffffffffffff81111561554957600080fd5b60208301915083602082850101111561556157600080fd5b9250929050565b600080600083850360a081121561557e57600080fd5b608081121561558c57600080fd5b50839250608084013567ffffffffffffffff8111156155aa57600080fd5b6155b68682870161551f565b9497909650939450505050565b600080604083850312156155d657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061564f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b8181101561567b5760208185018101518683018201520161565f565b8181111561568d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613dfe6020830184615655565b6000602082840312156156e557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461570e57600080fd5b50565b60006020828403121561572357600080fd5b8135614ed3816156ec565b8035801515811461573e57600080fd5b919050565b60008060006060848603121561575857600080fd5b833592506020840135915061576f6040850161572e565b90509250925092565b60006020828403121561578a57600080fd5b81356fffffffffffffffffffffffffffffffff81168114614ed357600080fd5b600080600080600080608087890312156157c357600080fd5b863595506157d36020880161572e565b9450604087013567ffffffffffffffff808211156157f057600080fd5b6157fc8a838b0161551f565b9096509450606089013591508082111561581557600080fd5b5061582289828a0161551f565b979a9699509497509295939492505050565b60008060006060848603121561584957600080fd5b505081359360208301359350604090920135919050565b63ffffffff841681528260208201526060604082015260006118fe6060830184615655565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000608082840312156158c657600080fd5b6040516080810181811067ffffffffffffffff82111715615910577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156159c2576159c2615980565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159f8576159f8615980565b5060010190565b600082821015615a1157615a11615980565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a5457615a54615a16565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a9157615a91615980565b500290565b600060208284031215615aa857600080fd5b8151614ed3816156ec565b600060208284031215615ac557600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615aed57615aed615980565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b1c57615b1c615980565b02949350505050565b60008060408385031215615b3857600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615b8a57615b8a615980565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615bc557615bc5615980565b60008712925087820587128484161615615be157615be1615980565b87850587128184161615615bf757615bf7615980565b505050929093029392505050565b600082615c1457615c14615a16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c6857615c68615980565b500590565b600082615c7c57615c7c615a16565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615aed57615aed615980565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615cd557615cd5615980565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d3b606083018789615cde565b8281036020840152615d4e818688615cde565b9150508260408301529695505050505050565b600060ff821660ff841680821015615d7b57615d7b615980565b90039392505050565b600060ff831680615d9757615d97615a16565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/kontrol/scripts/common.sh b/packages/contracts-bedrock/test/kontrol/scripts/common.sh index 968ec77bd993..444e6dd71762 100644 --- a/packages/contracts-bedrock/test/kontrol/scripts/common.sh +++ b/packages/contracts-bedrock/test/kontrol/scripts/common.sh @@ -39,7 +39,7 @@ WORKSPACE_DIR=$( cd "$SCRIPT_HOME/../../.." >/dev/null 2>&1 && pwd ) # Variables export KONTROL_FP_DEPLOYMENT="${KONTROL_FP_DEPLOYMENT:-false}" export CONTAINER_NAME=kontrol-tests -if [ "$KONTROL_FP_DEPLOYMENT" ]; then +if [ "$KONTROL_FP_DEPLOYMENT" = true ]; then export CONTAINER_NAME=kontrol-fp-tests fi KONTROLRC=$(jq -r .kontrol < "$WORKSPACE_DIR/../../versions.json")