0x0000000000000000000000000000000000000000000000000000000000001234608060405234801561001057600080fd5b50611626806100206000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806379857c231161008c5780639c667626116100665780639c667626146101b7578063afa71cb8146101f9578063d65795c31461020c578063fef9cf9b1461021f57600080fd5b806379857c231461017e578063842075651461019157806398ecc01a146101a457600080fd5b8063666f198d116100bd578063666f198d146101355780636e09dd16146101485780637958bc8c1461015b57600080fd5b80630d112049146100e457806359bd6ff4146100f957806362a6d1971461010c575b600080fd5b6100f76100f23660046111e4565b610232565b005b6100f761010736600461125c565b61029a565b61011f61011a3660046112af565b610305565b60405161012c91906112c8565b60405180910390f35b6100f76101433660046112af565b610479565b6100f761015636600461132d565b6104dc565b61016e6101693660046111e4565b61053f565b604051901515815260200161012c565b6100f761018c366004611368565b610554565b6100f761019f3660046111e4565b6105be565b6100f76101b23660046112af565b61061f565b61016e6101c53660046112af565b60009081527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d602052604090205460ff1690565b6100f7610207366004611368565b61067f565b6100f761021a3660046113b4565b6106e1565b6100f761022d3660046113e9565b610745565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461028957604051632f7a8ee160e01b815260040160405180910390fd5b61029682826000806107b0565b5050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff1633146102f157604051632f7a8ee160e01b815260040160405180910390fd5b6102ff8484848460006108ef565b50505050565b60008181527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497e602052604081206060917f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d9161036090610b08565b90508067ffffffffffffffff81111561037b5761037b611447565b6040519080825280602002602001820160405280156103c057816020015b60408051808201909152600080825260208201528152602001906001900390816103995790505b50925060005b8181101561047157600085815260018401602052604081206103e89083610b12565b9050808583815181106103fd576103fd611476565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9283169052600088815260028701825260408082209385168252929091522054855186908490811061045257610452611476565b6020908102919091018101510152610469826114a5565b9150506103c6565b505050919050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff1633146104d057604051632f7a8ee160e01b815260040160405180910390fd5b6104d981610b1e565b50565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461053357604051632f7a8ee160e01b815260040160405180910390fd5b6102ff848484846107b0565b600061054b8383610bf9565b90505b92915050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff1633146105ab57604051632f7a8ee160e01b815260040160405180910390fd5b6105b98383836000806108ef565b505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461061557604051632f7a8ee160e01b815260040160405180910390fd5b6102968282610c30565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461067657604051632f7a8ee160e01b815260040160405180910390fd5b6104d981610d4d565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff1633146106d657604051632f7a8ee160e01b815260040160405180910390fd5b6105b9838383610e25565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461073857604051632f7a8ee160e01b815260040160405180910390fd5b6105b983838360006107b0565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f6716804605473ffffffffffffffffffffffffffffffffffffffff16331461079c57604051632f7a8ee160e01b815260040160405180910390fd5b6107a985858585856108ef565b5050505050565b60008481527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497e602052604090207f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d906108099085610fbd565b15610840576040517fc18a4f8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152600182016020526040902061085a9085610fec565b506000858152600282016020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168085529083528184208790558884526003850183528184208185528352928190208590558051888152918201929092529081018490527f28fe12e21bec3527bc7a181a87ca5e7a646218458e8cb90ce845bbe5cf7a17669060600160405180910390a15050505050565b7f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d8360005b81811015610ac15761095c87878381811061093157610931611476565b90506020020160208101906109469190611504565b60008a8152600186016020526040902090610fbd565b15610993576040517fc18a4f8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d38787838181106109a8576109a8611476565b90506020020160208101906109bd9190611504565b60008a8152600186016020526040902090610fec565b506000888152600284016020526040812086918989858181106109f8576109f8611476565b9050602002016020810190610a0d9190611504565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838360030160008a81526020019081526020016000206000898985818110610a7557610a75611476565b9050602002016020810190610a8a9190611504565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002055610aba816114a5565b9050610914565b7f88d7a64ca203aeae11370903ed741761b75b74a9b5326424f737435d05f8531c88888888604051610af69493929190611573565b60405180910390a15050505050505050565b600061054e825490565b600061054b838361100e565b60008181527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d602081905260409091205460ff16610b88576040517f989aa33b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020828152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051858152918201929092527f37b57eb22f2f6cd66cdec8f97236a500e2bcd46e574738fe319c240339e756d891015b60405180910390a15050565b60008281527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497e6020526040812061054b9083610fbd565b60008281527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497e602052604090207f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d90610c899083610fbd565b610cbf576040517f21ba6abf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526001820160205260409020610cd99083611073565b506000838152600282016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552908352818420939093558051868152918201929092527f286976365d14354f2f275133839a23cf944d19c9e56cd78fe3d07c84c88c0bfd910160405180910390a1505050565b60008181527f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d602081905260409091205460ff1615610db8576040517f989aa33b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602082815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558251858152918201527f37b57eb22f2f6cd66cdec8f97236a500e2bcd46e574738fe319c240339e756d89101610bed565b7f8b3e8f46c99cb795ebda06e2a368cb0f3c8a09025665de4b1aef35b0dd2b497d8160005b81811015610f7a57610e92858583818110610e6757610e67611476565b9050602002016020810190610e7c9190611504565b6000888152600186016020526040902090610fbd565b610ec8576040517f21ba6abf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f08858583818110610edd57610edd611476565b9050602002016020810190610ef29190611504565b6000888152600186016020526040902090611073565b506000868152600284016020526040812090868684818110610f2c57610f2c611476565b9050602002016020810190610f419190611504565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600090812055610f73816114a5565b9050610e4a565b7f94400dfbb04fc4e1b8c67dfab336eb5c8c568afbc1eeae4c1244831db69778ae868686604051610fad9392919061159e565b60405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561054b565b600061054b8373ffffffffffffffffffffffffffffffffffffffff8416611095565b8154600090821061104b576040517fe637bf3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600001828154811061106057611060611476565b9060005260206000200154905092915050565b600061054b8373ffffffffffffffffffffffffffffffffffffffff84166110d8565b600081815260018301602052604081205461054e575081546001808201845560008481526020808220909301849055845493815293810190915260409092205590565b600081815260018301602052604081205480156111b457835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061112857611128611476565b906000526020600020015490508085600001600184038154811061114e5761114e611476565b6000918252602080832090910192909255918252600186019052604090208190558354849080611180576111806115c1565b6001900381819060005260206000200160009055905583600101600084815260200190815260200160002060009055600191505b5092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111df57600080fd5b919050565b600080604083850312156111f757600080fd5b82359150611207602084016111bb565b90509250929050565b60008083601f84011261122257600080fd5b50813567ffffffffffffffff81111561123a57600080fd5b6020830191508360208260051b850101111561125557600080fd5b9250929050565b6000806000806060858703121561127257600080fd5b84359350602085013567ffffffffffffffff81111561129057600080fd5b61129c87828801611210565b9598909750949560400135949350505050565b6000602082840312156112c157600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b82811015611320578151805173ffffffffffffffffffffffffffffffffffffffff1685528601518685015292840192908501906001016112e5565b5091979650505050505050565b6000806000806080858703121561134357600080fd5b84359350611353602086016111bb565b93969395505050506040820135916060013590565b60008060006040848603121561137d57600080fd5b83359250602084013567ffffffffffffffff81111561139b57600080fd5b6113a786828701611210565b9497909650939450505050565b6000806000606084860312156113c957600080fd5b833592506113d9602085016111bb565b9150604084013590509250925092565b60008060008060006080868803121561140157600080fd5b85359450602086013567ffffffffffffffff81111561141f57600080fd5b61142b88828901611210565b9699909850959660408101359660609091013595509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60006020828403121561151657600080fd5b61054b826111bb565b8183526000602080850194508260005b858110156115685773ffffffffffffffffffffffffffffffffffffffff611555836111bb565b168752958201959082019060010161152f565b509495945050505050565b84815260606020820152600061158d60608301858761151f565b905082604083015295945050505050565b8381526040602082015260006115b860408301848661151f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122014f8bf674133b0fe15ee9c957883fd643dc7dfd3c754576e6bb505a685c3718064736f6c63430008120033