60606040526040516020806200218283398101604052808051906020019091905050662386f26fc10000341415156200003757600080fd5b6040805190810160405280600b81526020017f50686f656e6978436f696e00000000000000000000000000000000000000000081525060029080519060200190620000849291906200022c565b506040805190810160405280600381526020017f504858000000000000000000000000000000000000000000000000000000000081525060039080519060200190620000d29291906200022c565b506012600460006101000a81548160ff021916908360ff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b60d4288346040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b1515620001b657600080fd5b5af11515620001c457600080fd5b5050505068056bc75e2d63100000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068056bc75e2d6310000060058190555050620002db565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026f57805160ff1916838001178555620002a0565b82800160010185558215620002a0579182015b828111156200029f57825182559160200191906001019062000282565b5b509050620002af9190620002b3565b5090565b620002d891905b80821115620002d4576000816000905550600101620002ba565b5090565b90565b611e9780620002eb6000396000f3006060604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100eb578063095ea7b31461017957806318160ddd146101d357806323b872dd146101fc578063313ce5671461027557806338e38a80146102a457806370a08231146102cd57806395d89b411461031a57806399f4b251146103a85780639d118770146103bd578063a9059cbb146103e0578063be45fd621461043a578063c33253b8146104d7578063c65036fb14610500578063dd62ed3e1461052d578063e171b84714610599575b600080fd5b34156100f657600080fd5b6100fe6105c6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018457600080fd5b6101b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061066e565b604051808215151515815260200191505060405180910390f35b34156101de57600080fd5b6101e6610760565b6040518082815260200191505060405180910390f35b341561020757600080fd5b61025b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061076a565b604051808215151515815260200191505060405180910390f35b341561028057600080fd5b61028861078a565b604051808260ff1660ff16815260200191505060405180910390f35b34156102af57600080fd5b6102b76107a1565b6040518082815260200191505060405180910390f35b34156102d857600080fd5b610304600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061082d565b6040518082815260200191505060405180910390f35b341561032557600080fd5b61032d610876565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561036d578082015181840152602081019050610352565b50505050905090810190601f16801561039a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b357600080fd5b6103bb61091e565b005b34156103c857600080fd5b6103de6004808035906020019091905050610d00565b005b34156103eb57600080fd5b610420600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610db9565b604051808215151515815260200191505060405180910390f35b341561044557600080fd5b6104bd600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610dd8565b604051808215151515815260200191505060405180910390f35b34156104e257600080fd5b6104ea610def565b6040518082815260200191505060405180910390f35b341561050b57600080fd5b610513610dff565b604051808215151515815260200191505060405180910390f35b341561053857600080fd5b610583600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ff9565b6040518082815260200191505060405180910390f35b34156105a457600080fd5b6105ac611080565b604051808215151515815260200191505060405180910390f35b6105ce611e43565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600554905090565b6000610774611e57565b61078085858584611190565b9150509392505050565b6000600460009054906101000a900460ff16905090565b60006107ab611080565b156107b9576000905061082a565b6108276107c46113e0565b61081962015180600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113e890919063ffffffff16565b61140690919063ffffffff16565b90505b90565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61087e611e43565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109145780601f106108e957610100808354040283529160200191610914565b820191906000526020600020905b8154815290600101906020018083116108f757829003601f168201915b5050505050905090565b600080600080600033945061093161141f565b9350600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156109ef57600080fd5b5af115156109fc57600080fd5b50505060405180519050925060008314151515610a1857600080fd5b610a20610dff565b15610afd5783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ab56113e0565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cf9565b610b56600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b486113e0565b61140690919063ffffffff16565b9150620151808210151515610b6a57600080fd5b610b738561169a565b905083600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c056113e0565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c9a81600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113e890919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cf2816005546113e890919063ffffffff16565b6005819055505b5050505050565b6000339050610d5782600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461140690919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610daf8260055461140690919063ffffffff16565b6005819055505050565b6000610dc3611e57565b610dcf33858584611190565b91505092915050565b6000610de633858585611190565b90509392505050565b6000610dfa3361169a565b905090565b6000806000803392506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610e595760019350610ff3565b62093a80610eb6600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ea86113e0565b61140690919063ffffffff16565b101515610ec65760019350610ff3565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610fc457600080fd5b5af11515610fd157600080fd5b50505060405180519050905081811015610fee5760019350610ff3565b600093505b50505090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561113f57600080fd5b5af1151561114c57600080fd5b505050604051805190509050600081141561116a576000915061118c565b611172610dff565b15611180576001915061118c565b611189336119c0565b91505b5090565b60003373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151561136257600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115151561125257600080fd5b6112e183600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461140690919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61136e85858585611a2d565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050949350505050565b600042905090565b60008082840190508381101515156113fc57fe5b8091505092915050565b600082821115151561141457fe5b818303905092915050565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156114aa57600080fd5b5af115156114b757600080fd5b505050604051805190509250600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561157f57600080fd5b5af1151561158c57600080fd5b505050604051805190509150600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368306e43306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561165457600080fd5b5af1151561166157600080fd5b505050604051805190509050611692816116848486611df590919063ffffffff16565b611e1090919063ffffffff16565b935050505090565b60008060008060008060008060006116b061141f565b9750600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549650600087141561170657600098506119b3565b61175f600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117516113e0565b61140690919063ffffffff16565b9550611774878961140690919063ffffffff16565b9450600085141561178857600098506119b3565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561180d57600080fd5b5af1151561181a57600080fd5b505050604051805190509350600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561192457600080fd5b5af1151561193157600080fd5b5050506040518051905091508282101561194e57600098506119b3565b6119618385611df590919063ffffffff16565b90506119b060506119a28861199462015180611986878c611df590919063ffffffff16565b611e1090919063ffffffff16565b611df590919063ffffffff16565b611e1090919063ffffffff16565b98505b5050505050505050919050565b600080611a1c600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0e6113e0565b61140690919063ffffffff16565b905062015180811015915050919050565b60008060008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515611a6d57600080fd5b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548511151515611abb57600080fd5b611b0d85600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461140690919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ba285600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113e890919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550853b91506000821115611d15578590508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a3387876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cb7578082015181840152602081019050611c9c565b50505050905090810190601f168015611ce45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515611d0457600080fd5b5af11515611d1157600080fd5b5050505b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1687876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dac578082015181840152602081019050611d91565b50505050905090810190601f168015611dd95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600192505050949350505050565b6000808284811515611e0357fe5b0490508091505092915050565b60008082840290506000841480611e315750828482811515611e2e57fe5b04145b1515611e3957fe5b8091505092915050565b602060405190810160405280600081525090565b6020604051908101604052806000815250905600a165627a7a72305820ab268eb06a927656f38febfe05690fac2597ce524bfa1f2027505e2ca735f7e600290000000000000000000000002fa0ac498d01632f959d3c18e38f4390b005e200